JavaScript is required

What is output? Giả sử dùng VC++ 2008 trên hệ điều hành 32 bit #include #include typedef struct { char c; // 1 byte float b; // 4 byte int a; // 4 byte }A; void main() { printf("\n Size of struct: %d", sizeof(A)); getch(); }

A.

9

B.

12

C.

16

D.

24

Trả lời:

Đáp án đúng: B


Trong C++, kích thước của một struct không chỉ là tổng kích thước của các thành viên của nó, mà còn phụ thuộc vào sự căn chỉnh (alignment) của các thành viên trong bộ nhớ. Điều này được thực hiện để tối ưu hóa hiệu suất truy cập bộ nhớ. Trong trường hợp này: - `char c`: 1 byte - `float b`: 4 byte - `int a`: 4 byte Thông thường, các biến kiểu `float` và `int` sẽ được căn chỉnh sao cho địa chỉ của chúng là bội số của 4. Để đảm bảo điều này, trình biên dịch có thể chèn thêm các byte đệm (padding) vào giữa các thành viên của struct. Trong trường hợp này, `char c` chiếm 1 byte. Để `float b` được căn chỉnh đúng (địa chỉ là bội số của 4), trình biên dịch sẽ chèn thêm 3 byte đệm sau `c`. Sau đó, `float b` chiếm 4 byte, và `int a` cũng chiếm 4 byte. Vậy tổng kích thước là 1 + 3 + 4 + 4 = 12 byte. Do đó, đáp án đúng là 12.

Câu hỏi liên quan