ความแตกต่างระหว่าง sizeof สำหรับ struct และผลรวมของ sizeof ของสมาชิกแต่ละตัวของ struct นั้นเกิดจากการที่ byte padding และจัดตำแหน่ง ข้อมูลทุกประเภทใน C/C++ มีข้อกำหนดการจัดตำแหน่ง โปรเซสเซอร์จะมีความยาวของคำในการประมวลผลของสถาปัตยกรรม สำหรับเครื่อง 32 บิต ขนาดคำในการประมวลผลจะเป็น 4 ไบต์หรือ 32 บิต ตัวอย่างเช่น หากคุณมีโครงสร้าง −
ตัวอย่าง
#include <iostream> using namespace std; struct X { char b[3]; int c; }; int main() { char b[3]; int c; int total = sizeof(b) + sizeof(c); cout << sizeof(X) << endl; cout << total; }
ผลลัพธ์
สิ่งนี้ให้ผลลัพธ์ -
8 7
บนเครื่อง 64 บิตของฉัน ทำไมถึงเป็นเช่นนี้? เป็นเพราะใน struct มันใช้ char array และใส่ไว้ในหน่วยความจำ แต่ตอนนี้ ถ้ามันวาง int ที่มีขนาด 4 ไบต์อยู่ข้างๆ กฎของการจัดตำแหน่งจะสูญเปล่า ดังนั้นไบต์พิเศษที่ส่วนท้ายของ b จะถูกข้ามและ c เริ่มต้นจากขอบเขต 4 ไบต์ ทำให้มีขนาดพิเศษ
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับกฎเหล่านี้ได้ที่ https://en.wikipedia.org/wiki/ Data_structure_alignment.