如果将两个相同的指针作为输入传递,memcmp 会做什么?
What does memcmp do if you pass two identical pointers as inputs?
我正在比较两个字节数组与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);
}
如果将两个相同的指针作为输入传递,memcmp 会做什么?
它将返回 0。
MEMCMP 是否已经 [如果指针相等,则提前返回]?
标准未指定。例如,我检查的 glibc 版本没有。
写这样的东西有意义吗
如果阵列足够大,则可能。
你认为什么足够大,
当您测量memcmp_wrapper
时,我认为数组足够大,比memcmp
快,与测量方差相比具有统计显著性的因子。
测量的一些考虑因素包括:
-
大小阈值在不同的系统中可能有所不同,具体取决于 CPU、缓存和内存等。请参阅什么是"缓存友好"代码?进行深入讨论。
-
另请注意,如果优化器可以在编译时证明指针的相等性,那么它可能足够聪明,可以完全优化
memcmp
,并且您最终可能会测量两个什么都不做的程序,因此请谨慎设计测试工具。
为什么它只对这个尺寸有意义?
分支不是免费的。不比较阵列可以节省的时间必须克服添加检查的费用。
由于比较数组的成本(线性渐近复杂度(随着数组的大小而增加,因此必须有一定的长度,之后任何比较都将比分支慢。
如果"相同的数组"是指相同的指针,那么是的,这是有道理的。但是,如果您想比较内容(memcmp
实现应该做什么(,则相等就没有意义。
此外,您正在使用的memcmp
的实现可以进行此验证。
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 检查输入是否不是整数或数字
- 正在尝试了解输入验证循环
- 读取文件并输入到矢量中
- C++如何通过用户输入删除列表元素
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 用户定义函数中的指针和输入
- 如何在C++中检查2D数组中负值的输入验证
- 如何只允许用户输入正整数
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 输入中的字符串数未知(以字母表示)
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 如果将两个相同的指针作为输入传递,memcmp 会做什么?