→ rephansu:我怎麼覺得你的文章不太正確, X_和Y_的描述不對啊 01/26 07:59
→ rephansu:或許這在VC2010和GCC上結果不同, 我目前只能試VC2010 01/26 08:06
→ barfat:不同 OS,不同 compiler 會有不同的結果 01/26 08:51
→ barfat:64 bits OS ,pointer has 8 bytes 01/26 08:52
→ barfat:32 bits has 4 bytes 01/26 08:52
→ barfat:compiler 必須做到 stru 裡面的變數,都必須放在此變數長度, 01/26 08:58
→ barfat:的倍數上的記憶體位址,所以 long 如果是 8 bytes的話 01/26 08:59
→ barfat:它必須在 8 的倍數的記憶體上 , structure A_ arrvar[10] 01/26 09:01
→ barfat:compiler 必須做到 structure array 每個變數都合乎這規則 01/26 09:02
→ barfat:X86_64 one cache line has 64 bytes,如果你的 long 不是8 01/26 09:03
→ barfat:倍數的話,就可能發生 long 變數跨過 兩條 cache lines 01/26 09:04
→ barfat:那麼 , concurrency atomic 上就會出現問題 01/26 09:05
→ barfat:我是指"long變數memory location不是8倍數的話" ... 01/26 09:06
→ rephansu:如果要用對或錯來判定你的解釋, 我認為是錯的, 01/26 10:01
→ rephansu:你可以試著把age 和 name[0]用各種型別帶入測試, 01/26 10:02
→ rephansu:例如char , short , long long 01/26 10:02
→ rephansu:我想很快的你會發現跟你的解釋有些出入 01/26 10:03
→ rephansu:sizeof(X_)會8是因為sizeof(char *)是8,因此要擴充到8 01/26 10:09
→ rephansu:這只是struct alignment預設行為是這樣, 跟cpu實作無關 01/26 10:11
→ rephansu:畢竟struct alignment也可以設定為1byte 01/26 10:14
→ rephansu:嗯...想了一下其實是在講差不多的事情,忘記上面說的吧XD 01/26 10:21