malloc함수에 대해서 궁금한 점이 있습니다..
글쓴이: rapzzard / 작성시간: 목, 2005/02/03 - 7:28오후
malloc을 보면 void*를 리턴하게 되는데요..
보통,
int *a = (int *)malloc(sizeof(int) * 100); or double *b = malloc(sizeof(double) * 100);
같은 구문이 있다고 할때, malloc이 반환하는 시작주소값이 정렬제한문제와 관련이 있는지가 궁금합니다..
만약, int가 4의 배수의 정렬제한을 가지고, double이 8의 배수의 정렬제한을 가지는 임플리멘테이션이라고 가정하면,
적어도 malloc이 할당하는 메모리의 시작주소는 int나 double혹은 기본적인 데이터타입들이 가지는 정렬제한의 최소공배수의 배수가 되야할텐데..
첫번째의 경우, malloc이 4의 배수가 되는 주소를 시작주소로 가지지 않고 할당하게 되면, 아무래도 정렬제한문제에 걸릴것같은데..
지금까지 무의식적으로 명시적으로 캐스팅하거나 암묵적인 캐스팅을 통해서 잘 써왔는데 갑자기 정렬제한 문제와 관련이 있을지 혹은 없을지에 대해서 아무리 생각을 해봐도..잘 모르겠습니다..
Forums:
malloc()은 aligned address를 돌려줍니다. 즉, 정렬
malloc()은 aligned address를 돌려줍니다. 즉, 정렬 제한에 맞추어 메모리 공간을 할당하고 돌려주기 때문에 걱정하실 필요 없습니다.
확실한 근거를 원하실까봐 C99 표준 문서를 인용합니다:
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기