我正在使用一个使用“memcpy”来模拟直接访问的动态存储数据结构的库。重要的是要注意我正在处理由小数据集导致的数值运算。如何确定链接列表在效率方面是否比memcpy更合适?
从我在文献和网上发现的情况来看,基准被认为是非常邪恶的。
我正在处理大约30个元素(来自经验)的小尺寸(3个分量向量:空间中的点)。
在这种情况下你会用什么:
1)memcpy +直接访问 2)链表+线性搜索时间
谢谢!
答案 0 :(得分:3)
如果你真的非常关心性能,你应该测量它,即对你的代码进行基准测试(这不是邪恶的,这是常见的做法; 什么是邪恶是过早的优化)。
但请注意,至少在GNU / Linux上使用最近的GCC(例如GCC 4.6)并且至少通过-O2进行优化时,memcpy
& memset
半神奇地(通过__builtin_memcpy
或类似的技巧)转换为非常有效的代码。
对于大量小数据元素,我猜测缓存考虑因素占主导地位w.r.t.性能
答案 1 :(得分:1)
分析或基准是不邪恶。它们是确定哪种更多选项更有效的最佳方法。现在,凭借优化器的“智能性”,反直觉选项可能实际上证明是最有效的。我建议你运行一个基准测试并根据它进行选择。唯一可能出错的方法是提供有效的输入,这涵盖了大多数情况。
答案 2 :(得分:1)
当你处理如此少量的数据时 - 你为什么担心呢?
基准测试仅适用于大量计算 - 限制操作系统的其他影响。
答案 3 :(得分:0)
使用如此小的数据集(30 * 12字节),您的所有数据都在缓存行中。所以我确定它会比列表更快。如果你使用一个列表,你仍然需要分配一块内存,这在大多数操作系统上花费的时间比复制这么小的一块内存要多。