我正在将两个字节数组与 memcmp
进行比较(或者更确切地说是库函数这样做)。数组可以变得相对较大,并且在许多情况下它们实际上可以是同一个数组。
写这样的东西有意义吗,还是 memcmp
已经在内部这样做了?
int memcmp_wrapper(const void* lhs, const void* rhs, std::size_t count) {
if (lhs == rhs)
return 0;
return std::memcmp(lhs, rhs, count);
}
最佳答案
它将返回 0。
标准中没有规定。例如,我检查过的 glibc 版本没有。
可能,如果数组足够大。
当您测量 memcmp_wrapper
比 memcmp
快于一个与测量方差相比具有统计显着性的因素时,我会认为该数组足够大。
测量的一些考虑因素包括:
memcmp
,并且您最终可能会测量两个什么都不做的程序,因此请谨慎设计您的测试工具。 分行不是免费的。您可以通过不比较数组节省的时间必须克服添加检查的费用。
由于比较数组的成本随着数组的大小而增加(线性渐近复杂度),因此必须有一定的长度,之后任何比较都将比分支慢。
关于c++ - 如果将两个相同的指针作为输入传递, memcmp 会做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58305215/