Computer >> Máy Tính >  >> Lập trình >> C ++

Tại sao sizeof cho một cấu trúc không bằng tổng sizeof của mỗi thành viên trong C / C ++?


Sự khác biệt giữa sizeof cho một cấu trúc và tổng sizeof của mỗi thành viên trong cấu trúc đó là do sự liên kết và đệm byte. Mọi kiểu dữ liệu trong C / C ++ đều có yêu cầu về căn chỉnh. Một bộ xử lý sẽ có độ dài từ xử lý của kiến ​​trúc của nó. Trên máy 32 bit, kích thước từ xử lý sẽ là 4 byte hoặc 32 bit. Ví dụ:Nếu bạn có cấu trúc -

Ví dụ

#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;
}

Đầu ra

Điều này cho kết quả -

8
7

Trên máy 64 bit của tôi. Tại sao thế này? Đó là bởi vì trong cấu trúc, nó lấy mảng char và đưa nó vào bộ nhớ nhưng bây giờ nếu nó đặt int có kích thước là 4 byte bên cạnh nó, các quy tắc căn chỉnh sẽ bị loại bỏ. Vì vậy, byte thừa ở cuối b bị bỏ qua và c bắt đầu từ giới hạn 4 byte. Điều này gây ra kích thước lớn hơn.

Bạn có thể đọc thêm về các quy tắc này tại https://en.wikipedia.org/wiki/ Căn_trục_dữ_liệu.