我有一个std::vector
填充了以下结构:
#define ELEMENTSIZE 8
struct Element {
int value;
char size[ELEMENTSIZE - 4]; //1 char is 1B in size - 4B int
};
结构的大小取决于定义的元素大小,这会在结构中生成指定大小的字符数组。
我正在对矢量中这些结构的平均值进行基准测试,我很想知道填充大尺寸结构的矢量需要更长时间迭代的原因。
例如,具有1 000 000个8B结构的载体大约需要1,7ms,而相同的测试需要128B结构12,7ms。
这是因为只有缓存吗?如果是这样,你能解释一下原因吗?或者还有其他方面我看不到?
答案 0 :(得分:0)
结构大16倍,因此迭代需要花费16倍的时间。数学上12,7 / 1,7 = 7,47倍,所以几乎在数学上匹配。
现在假设包含128B元素的结构是一个包含8B元素的结构,但大小相同。你现在看到它真的大16倍吗?
答案 1 :(得分:0)
操作系统必须将更大的结构带入内存,这可能需要这条路径:
iterator
对象周围复制内容。它在很大程度上取决于缓存性能。如果所有这一切都发生了,为什么128
结构不会比8
字节结构花费更多时间?