可能重複:
Is there any guarantee of alignment of address return by C++'s new operation?C++新爲64字節對齊的和等於高速緩存行大小
在這個程序中,我打印由新無符號返回的每個地址字符。然後最後將它們向後刪除。
#include "stdafx.h"
#include<stdlib.h>
void func();
int main()
{
int i=10;
while(i-->0)printf("loaded %i \n", (new unsigned char));
getchar();
unsigned char *p=new unsigned char;printf("last pointer loaded %i \n", p);
i=10;
while(i-->0)delete (p-=64);
getchar();
p+=640;
delete p;//nearly forgot to delete this ^^
return 0;
}
輸出:
正如你所看到的,每個新收益64字節對齊數據。
問題:這是64字節等於緩存行大小還是隻是一個編譯器的東西?
問題:我應該使我的結構大部分是64字節長嗎?
問題:當我更改我的cpu,ram,OS或編譯器時,這會不同嗎?
Pentium-m,VC++ 2010 express,windows-xp
謝謝。
'malloc'需要返回適合任何類型的指針。如果'new'具有相同的要求,或者只是針對給定的特定類型進行對齊,我就不會記得。但是,該標準沒有提及緩存行。 – BoBTFish 2012-08-10 09:34:24
你的意思是,在C中它是絕對對齊的。 – 2012-08-10 09:35:26
http://stackoverflow.com/questions/506518/is-there-any-guarantee-of-alignment-of-address-return-by-cs-new-operation 'new'返回一個指針對齊任何類型。 – BoBTFish 2012-08-10 09:38:29