Một dòng mã có giá trị một ngàn chữ :) Dưới đây là vấn đề của tôi:C++ chỉnh bộ nhớ câu hỏi
/* Platform specific 16-byte alignment macro switch.
On Visual C++ it would substitute __declspec(align(16)).
On GCC it substitutes __attribute__((aligned (16))).
*/
#define ALIGN_16 ...
struct ALIGN_16 A {...};
A* ptr = new A;
A* ptr2 = new A[20];
assert(size_t(ptr) % 16 == 0);
for (int i=0; i<20; ++i)
assert(size_t(ptr2+i) % 16 == 0);
assert(sizeof(A) % 16 == 0);
Tôi có thể hy vọng rằng tất cả khẳng định vượt qua trên nền tảng với sự hỗ trợ SSE? Cảm ơn bạn.
EDIT. Câu trả lời một phần. Tôi đã làm một số thử nghiệm với VS2008, GCC và ICC. Trình biên dịch MS đã căn chỉnh cả hai ptr và ptr2, nhưng GCC và ICC không thể căn chỉnh ptr2.
Tại sao một mảng của 20 Như? – John
Chỉ cần ra khỏi đầu của tôi. Tôi đã lang thang, nếu mọi phần tử của mảng cũng được căn chỉnh. – watson1180
Các phần tử của một mảng được phân bổ phù hợp được đảm bảo theo tiêu chuẩn để được căn chỉnh phù hợp với loại được đề cập. Tuy nhiên, sự liên kết đó là một chi tiết thực hiện và có thể theo lý thuyết là một byte (tức là sự sắp xếp được đóng gói.) –