Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เหตุใด sizeof สำหรับโครงสร้างไม่เท่ากับผลรวมของ sizeof ของสมาชิกแต่ละคนใน C/C++


ความแตกต่างระหว่าง 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.