我有填充有下列結構一個std::vector
:迭代速度和元件大小
#define ELEMENTSIZE 8
struct Element {
int value;
char size[ELEMENTSIZE - 4]; //1 char is 1B in size - 4B int
};
結構的大小取決於所定義elementsize,這使得在結構指定大小的字符數組。
我是基準向量中的這些結構的平均值,我很想知道爲什麼向量填充更大的結構體積需要更長的時間來迭代。
例如,具有1 000 000個8B結構的矢量需要大約17ms,並且具有128個結構12.7ms的相同測試。
僅因緩存而存在很大差異嗎?如果是這樣,你能解釋爲什麼嗎?還是還有其他方面我看不到?
好吧,這聽起來很合理。但是,如果我看起來更深一點,矢量是存儲器中的連續存儲器。所以我想,當我遍歷矢量時,處理器應該在緩存中有下一個迭代。我有一個64x處理器,並且更大的結構需要更多的操作來處理(可以說3倍多的操作),但爲什麼這個延遲很大?我錯過了什麼? – AdamT
在硬件級別更多的數據將被移動。您不能說4個字節,4MB複製需要相同的時間。 – Ajay