Ví dụ 1 | Ví dụ 2 |
struct number{ char a; int b; char c; }mynum; … cout< //12 | struct number{ char a; char c; int b; }mynum; … cout< //8 |
Trong ví dụ 1: char – 1byte int – 4byte Đầu tiên, dữ liệu thành viên char sẽ lấp đầy nhóm 4byte, char chiếm 1byte nên còn thừa 3 byte. Dữ liệu thành viên tiếp theo là int. Vì int chiếm 4byte, nhưng chỉ thừa có 3 byte, nó không đủ chỗ cho int. Do đó, hệ thống sẽ tự động cung cấp thêm 3 byte để lấp đầy phần còn thừa. Tiếp theo, sẽ cung cấp nhóm 4 byte cho int. Không có byte thừa trong trường hợp này. Kiểu dữ liệu thành viên char còn lại chiếm 1byte, nhưng hệ thống cung cấp cho nó 4 byte, còn thừa 3 byte. Số byte thừa này sẽ được lấp đầy. Như vậy, số byte trong trường hợp này là (1+3)+4+(1+3)=12 byte. | Trong ví dụ 2: Cũng tương tự ví dụ 1. Dữ liệu thành viên char thứ nhất chiếm 1 byte, hệ thống cung cấp 4 byte, như vậy thừa 3 byte. Kiểu dữ liệu thành viên tiếp theo cũng kiểu char, chiếm 1byte, nó có thể lấp vào số byte còn thừa. Tại thời điểm này, còn thừa 2 byte. Tiếp theo, ta xét đến dữ liệu thành viên int. Dữ liệu này chiếm 4 byte, nhưng chỉ còn thừa 2 byte, do đó hệ thống sẽ lấp đầy 2 byte này và cung cấp thêm 4 byte mới cho int. Như vậy, số byte trong trường hợp này là (1+1+2)+4=8 byte. |
char | char | int |
Nếu theo cách tính trên thì Struct A { char a; short b; char c} có size là 4 byte ??
ReplyDelete