한 줄의 코드는 여기에 :) 천 개 단어의 가치가 내 문제는 다음과 같습니다C++ 메모리 정렬 질문
/* 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);
나는 모든 주장은 SSE를 지원하는 플랫폼에 전달할 것으로 예상 할 수 있습니까? 고맙습니다.
EDIT. 부분적인 대답. VS2008, GCC 및 ICC로 몇 가지 테스트를 수행했습니다. MS 컴파일러는 ptr과 ptr2을 모두 정렬했지만 GCC와 ICC는 ptr2을 정렬하지 못했습니다.
왜 (20)의 배열 같이? – John
그냥 내 머리에서. 배열의 모든 요소가 정렬되어 있다면 방황하고있었습니다. – watson1180
적절히 할당 된 배열의 요소는 해당 유형에 맞게 올바르게 정렬되도록 표준에 의해 보장됩니다. 그러나이 정렬은 구현 세부 사항이며 이론적으로 1 바이트 (즉, 묶음 정렬)가 될 수 있습니다. –