
Nguyên bản được gửi bởi
Dreaminess
Tip 9: Tối ưu hóa kích thước lớp
Kích thước 1 lớp có thể thay đổi bằng việc thay đổi trật tự khai báo các thành viên:
PHP Code:
struct A
{
bool a;
int b;
bool c;
}; /*sizeof (A) == 12*/
Trong trường hợp trên, sizeof (A) = 12. Trình biên dịch đã đặt 3 byte đệm (padding bytes) sau mỗi thành viên bool cho “vừa vặn” với biên giới 4-byte (four-byte boundary). Có thể giảm kích thước của A bằng cách tổ chức lại các thành viên của nó như sau:
PHP Code:
struct B
{
bool a;
bool c;
int b;
}; // sizeof (B) == 8
Lần này, trình biên dịch chỉ đặt 2 byte đệm sau thành viên c. Vì b chiếm 4 byte, nó cơ bản đã vừa với biên giới 4-byte mà không cần đặt các byte đệm.
Với ví dụ trên thì em hiểu. Nhưng em thử test bằng cách này ,cho hỏi cách lý giải tại sao lại ra 2 size khác nhau:
Code:
struct TEST
{
bool a;
bool b;
char d[10];
int c;
}; //sizeof(TEST) == 16
Code:
struct TEST
{
bool a;
int c;
bool b;
char d[10];
}; //sizeof(TEST) == 20
Code:
struct TEST
{
bool a;
bool b;
int c;
char d[10];
}; //sizeof(TEST) == 20