使用memcpy进行“动态存储”

时间:2011-10-28 14:11:51

标签: c++ data-structures memcpy

我正在使用一个使用“memcpy”来模拟直接访问的动态存储数据结构的库。重要的是要注意我正在处理由小数据集导致的数值运算。如何确定链接列表在效率方面是否比memcpy更合适?

从我在文献和网上发现的情况来看,基准被认为是非常邪恶的。

我正在处理大约30个元素(来自经验)的小尺寸(3个分量向量:空间中的点)。

在这种情况下你会用什么:

1)memcpy +直接访问 2)链表+线性搜索时间

谢谢!

4 个答案:

答案 0 :(得分:3)

如果你真的非常关心性能,你应该测量它,即对你的代码进行基准测试(这不是邪恶的,这是常见的做法; 什么是邪恶是过早的优化)。

但请注意,至少在GNU / Linux上使用最近的GCC(例如GCC 4.6)并且至少通过-O2进行优化时,memcpy& memset半神奇地(通过__builtin_memcpy或类似的技巧)转换为非常有效的代码。

对于大量小数据元素,我猜测缓存考虑因素占主导地位w.r.t.性能

答案 1 :(得分:1)

分析或基准是邪恶。它们是确定哪种更多选项更有效的最佳方法。现在,凭借优化器的“智能性”,反直觉选项可能实际上证明是最有效的。我建议你运行一个基准测试并根据它进行选择。唯一可能出错的方法是提供有效的输入,这涵盖了大多数情况。

答案 2 :(得分:1)

当你处理如此少量的数据时 - 你为什么担心呢?

基准测试仅适用于大量计算 - 限制操作系统的其他影响。

答案 3 :(得分:0)

使用如此小的数据集(30 * 12字节),您的所有数据都在缓存行中。所以我确定它会比列表更快。如果你使用一个列表,你仍然需要分配一块内存,这在大多数操作系统上花费的时间比复制这么小的一块内存要多。