我有两个性能截然不同的简单代码块:
void testProto() {
demo::Person* person = new demo::Person();
person->set_data(data, BUFFER_LEN);
}
void testMemcpy() {
demo::Person* person = new demo::Person();
memcpy(memcpy_dest, data, BUFFER_LEN);
}proto文件如下所示:
message Person {
bytes data = 1;
}根据Protobuf编码文档,设置长度分隔的数据就像用几个头字节复制数据一样简单。为什么第一个函数比第二个函数花费的时间多5-10倍?
我制作了一个完整的、易于运行的示例这里。
补充说明/背景:
Set方法下面一步。testMemcpy里面试过malloc。这让事情慢了一点,但至少还要差5倍。发布于 2021-12-20 23:30:24
基准测试中的代码无效。这个节目的格式不正确.
如果不是的话,[如-规则]就会适用。
调用testMemcpy()函数与不做任何操作之间没有明显的行为差异。(除了分配不能释放的内存之外,还可以忽略内存,这是未定义的行为)。
https://stackoverflow.com/questions/70428781
复制相似问题