假定4字節的自然對齊。加載緩存時的數據對齊
struct Node
{
int data;
char c_data;
};
int main() {
int global = 10;
struct Node N;
for (register int i = 0; i < 10; i++)
cout << global << N.data << endl; }
如果緩存行大小爲16字節,如果我的程序在訪問這些環2個變量,這些變量將如何存在於緩存?假設一切都是寄存器變量。
在同一緩存行?
在不同的緩存行?
如果相同的緩存行,每個成員會在緩存中以4字節對齊的地址開始嗎?像全局變量將跨越[0,3],N將跨越[4,7] ..類似的東西?或者如果結構只有一個字符,它甚至可以從緩存行中的[5]開始。
基本上,在將數據加載到緩存中時,根據結構的大小考慮對齊還是第一個成員?
根據行大小而不是數據大小將數據加載到緩存行中,因此,內存中的數據組織/對齊會反映到緩存中。 – LPs