Có, I có đọc này: http://msdn.microsoft.com/en-us/library/83ythb65.aspx Nhưng không rõ ràng với tôi. Trước hết, __declspec(align(#))
làm cho mọi đối tượng (trong một cấu trúc) được khai báo với nó bắt đầu tại một offset được căn chỉnh. Phần đó rõ ràng. Các aligment cũng là 'kế thừa' bởi các cấu trúc các đối tượng được in Nhưng nó không thay đổi kích thước của đối tượng, phải không? Chính xác, tại sao sizeof()
trong mã này:Công việc `__declspec (align (#))` hoạt động như thế nào?
__declspec(align(32)) struct aType {int a; int b;};
sizeof(aType);
return 32
?
Vì vậy, nó thực sự ** thay đổi ** kích thước của cấu trúc/đối tượng? – NPS
Có, 'struct' hiện dài 32 byte. 8 byte cho hai số nguyên và 24 trong số các byte đó là "phụ" để lấp đầy khoảng trống giữa đối tượng aType đầu tiên và thứ hai trong một mảng, ví dụ. –
Ok, nhưng tại sao lại ở đây: 'struct aType {int a; int b;}; typedef __declspec (align (32)) struct aType bType; 'nó chỉ thay đổi căn chỉnh và không phải kích thước ([MSDN] (http://msdn.microsoft.com/pl-pl/library/83ythb65.aspx)," Định nghĩa các kiểu mới với __declspec (align (#)) ")? – NPS