Helpex - Trao đổi & giúp đỡ Đăng nhập
18

Được

struct S {
  SomeType single_element_in_the_struct;
};

Có phải luôn luôn đúng rằng

sizeof(struct S) == sizeof(SomeType)

Hoặc nó có thể được thực hiện phụ thuộc?

18 hữu ích 0 bình luận 2.5k xem chia sẻ
14

Điều này thường xảy ra, nhưng nó không được đảm bảo.

Bất kỳ cấu trúc nào cũng có thể có các byte đệm không tên ở cuối cấu trúc, nhưng chúng thường được sử dụng cho mục đích căn chỉnh, điều này không đáng lo ngại nếu bạn chỉ có một phần tử duy nhất.

14 hữu ích 4 bình luận chia sẻ
13

Nó không nhất thiết phải bằng nhau, do cấu trúc đệm.

Phần 6.7.2.1 trong tiêu chuẩn C99 quy định rằng "Có thể có phần đệm không tên trong đối tượng cấu trúc, nhưng không phải ở phần đầu của nó".

Điều này được coi là đệm cấu trúc. Các phần đệm có thể được thêm vào để đảm bảo rằng cấu trúc được căn chỉnh chính xác trong bộ nhớ. Kích thước exakt của một cấu trúc có thể thay đổi nếu bạn thay đổi thứ tự của các thành viên của nó.

13 hữu ích 3 bình luận chia sẻ
1

Nó phụ thuộc vào việc đóng gói trình biên dịch của bạn. Thông thường kích thước của một cấu trúc chia hết cho độ dài từ trong hệ thống của bạn (ví dụ: 4 byte == 32 bit).

Vì vậy, bạn thường sẽ có sizeof(struct S) > sizeof(SomeType)

Đối với hầu hết các trình biên dịch, bạn có thể sửa đổi kích thước đóng gói bằng cách sử dụng pragmas của trình biên dịch. Nếu bạn đặt #pragma pack(1) thì các kích thước phải bằng nhau.

1 hữu ích 1 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c++ c , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading