任何人都可以請解釋發生了什麼?MSVC 2008 16字節結構成員對齊怪異
我MSVC 2008項目的結構構件對準設置被設置爲16字節(/ Zp16)對準,但是正在由16字節對準的以下結構之一和另一個由只對準8字節 ... 爲什麼?!!!
struct HashData
{
void *pData;
const char* pName;
int crc;
bool bModified;
}; // sizeof (HashData) == 4 + 4 + 4 + 1 + padding = 16 bytes, ok
class StringHash
{
HashData data[1024];
int mask;
int size;
}; // sizeof(StringHash) == 1024 * 16 + 4 + 4 + 0 = 16392 bytes, why not 16400 bytes?
這可能不會看起來像一個大問題,但對我來說是很大的問題,因爲我不得不仿效MSVC結構排列在GCC並指定對齊(16)屬性使sizeof(StringHash)== 16400!
請你告訴我,什麼時候,爲什麼MSVC覆蓋/Zp16設置,我絕對無法捉摸它...
+1此外OP,如果你想要做類似的東西'__attribute __((排列(16)))'在MSVC中它是'#pragma pack(push,16)''struct/* ... * /''#pragma pack(pop)'。 – user786653