Tag Archives: sizeof

Toán tử sizeof với struct (C)

Toán tử sizeof hay được dùng để tính kích thức bộ nhớ cần khi cấp phát động. Để diễn tả một cách dễ hiểu thì ví dụ là hay nhất!!!

struct HS {

        char name;

        int id;

};

Bạn đoán thử sizeof(HS) = ???

Có lẽ bạn sẽ đoán nó = 5 (sizeof(char) = 1, sizeof(int) = 4). Nhưng trình biên dịch lại cho kết quả là 8??? Vì sao vậy?

Cơ chế cấp phát là như sau:

  • Đầu tiên nó sẽ lấy kích thước của biến lớn nhất trong struct HS là sizeof(id) = 4 cấp phát 4 byte để chứa biến name (kích thước = 1 byte) còn dư 3 byte.
  • Tiếp theo nó sẽ chứa tiếp biến id (kích thước 4 byte) mà chỉ còn có 3 byte (không đủ) nên bộ nhớ sẽ cấp phát thêm 4 byte để chứa biến id.
  • => Sau khi cấp phát: 8 byte (còn dư 3 byte) !!!

Đến đây chắc bạn có câu trả lời rồi nhỉ? ^^ . Để hiểu thêm ta có 1 ví dụ típ theo như sau:

struct SV {

        int DiemAV;

        double diemToan;

        double diemLT;

        int diemRL;

};

Bạn đoán xem sizeof(SV) = ???

Đáp án là 32 byte!!! (dư 8 byte). Vậy phải làm sao để tiết kiệm được 8 byte này???

Đơn giản nhất là sắp các biến trong struct SV lại thôi!!!

struct SV {

        int DiemAV;

        int diemRL;

        double diemToan;

         double diemLT;

};

Và bây giờ  sizeof(SV) = 24 byte !!! ^^

struct SV { };

Now, sizeof(SV) = ???

=> 1 byte!!!

Mặc định sẽ dành 1 byte để chứa struct!!!

Advertisements