推 VictorTom:你先單獨印sizeof struct裡的element, 即char/int等, 02/25 00:00
→ VictorTom:然後再考慮一下struct的alignment/padding的用途, 才能 02/25 00:01
→ VictorTom:推算出來為什麼在你的平台上你會跑出那樣的結果. 02/25 00:01
→ VictorTom:如果已經確認了int是4byte, 那請查一下alignment的目的, 02/25 00:03
→ VictorTom:並不是64bit的platform, struct的size就一定要對齊/為8 02/25 00:03
→ VictorTom:的倍數. 02/25 00:04
雖然你這麼說 但是好像也沒說到原因 我還是不太了解@@
※ 編輯: XYX16888 來自: 123.192.156.147 (02/25 00:42)
推 chrisdar: sizeof(int) = 4 就是答案了.... 02/25 00:49
→ chrisdar:要公式嗎?sizeof(struct xxx) % sizeof(element) == 0 02/25 00:51
推 VictorTom:噗~~小弟我是沒說原因啊, 不就說了請你去查查了解它嗎XD 02/25 01:19
推 purpose:V大修養太讚啦 02/25 01:31
推 loveme00835:樓上是想做啥 XDD 02/25 01:32
推 VictorTom:其實我不太懂怎麼了XD 本來想找中文的, 結果google前幾 02/25 01:34
→ VictorTom:名都只提到一小部份或講#param pack, 所以只好拉Wiki.XD 02/25 01:36
→ uranusjr:我一直有個印象之前有篇精美的文章說明很清楚但卻找不到 02/25 01:49
我有看 struct alignment
但是我仍舊覺得很疑惑才來問的
我再整理一次我的問題好了
(一)的記憶體分配圖示
記憶體分配圖示
|| ---- ---- || ---- ---- ||
^ ^^^^ ^
char int char
因為最小單位是8 最後8bytes中他只用了1bytes
所以我認為總共仍是配置16bytes 但是跑出來的結果是12
這是我主要的問題點
(二)的記憶體分配圖示
|| ---- ---- || ---- ---- ||
^^^^ ^^^^ ^
long char
因為最小單位是8所以最後那個8只用了1bytes 但仍配了8byte
總共是16byte 印出也是16沒有問題
我刻意po了兩個問題 就是要拿來比較
明明是一樣的分配 卻是不同的大小
所以才想問大家我的想法哪裡有誤?煩請不吝糾正我
※ 編輯: XYX16888 來自: 140.112.4.181 (02/25 09:33)
※ 編輯: XYX16888 來自: 140.112.4.181 (02/25 09:35)
推 VictorTom:我想我已經推過了, 沒有規定64bit一定要以8為單位, "最 02/25 09:59
→ VictorTom:小單位是8"是你錯誤的想法, struct的尾端要怎麼padding/ 02/25 10:00
→ VictorTom:alignment, 在我給的Wiki網頁裡的某一句粗體字說明.... 02/25 10:00
→ VictorTom:"the last member is padded with the number of bytes 02/25 10:01
→ VictorTom:....", 一行推不完, 剩下的自己去看, 至於源由我想好好 02/25 10:03
→ VictorTom:看完這則Wiki就應該會懂.... 02/25 10:03
推 stupid0319:因為RAX,EAX,AX,AH,AL? 02/25 11:13
→ XYX16888:我想我應該了解了 謝謝:) 02/25 16:18