Wednesday, April 23, 2008

Memory, Alignment

어떤 변수가 자신의 size의 정수배가 되는 위치에 align된 경우 naturally aligned라고 한다(예로, 32bit 정수가 4bytes 정수배의 메모리에 위치한 경우 - 이 경우 주소의 마지막 두자리가 '00'이 된다). 따라서 2^n 크기의 변수가 naturally aligned 되려면 주소의 마지막 n 비트들이 0이 된다.

시스템에 따라서 alignment가 잘못되는 경우 비정상적으로 동작하거나 심각한 성능 저하를 초래할 수 있다. posix에서 alignment를 맞춰주는 함수를 제공하는데 아래와 같다.

#include <stdlib.h>

int posix_memalign (void **memptr, size_t alignment, size_t size);

위 함수는 alignment의 정수배에 해당하는 주소에 size 만큼의 메모리를 할당한 후 그 주소를 **memptr에 담아 돌려준다.

No comments:

Post a Comment