aligned_malloc()에서 alignment가 뭔가요?
글쓴이: manim / 작성시간: 금, 2006/02/24 - 3:11오후
aligned_malloc() 과 aligned_free() function를 구현하려고 하는데요
alignment의 개념이 이해가 안되어 질문 드립니다
void * aligned_malloc(size_t bytes, size_t alignment);
void aligned_free(void * p);
여기서 memory의 boundary를 정한다는게 무슨 의미인가요?
alignment라는 value는 memory의 boundary 를 정하는 것이고
앞에 들어가는 bytes는 input의 size가 되는건가요?
그리고 왜 alignment는 2의 배수여야만 하는지요?
이해가 안되서 웹에서 검색하다가 여러개의 코드를 찾았지만..
개념이 이해가 안되니 코드를 봐도 모르겠더라구요:)
void *aligned_malloc (size_t size, size_t alignment) { void* ptr = malloc(size + alignment); if (ptr) { void* aligned = (void*)(((long)ptr + alignment) & ~(alignment - 1)); ((void**)aligned)[-1] = ptr; return aligned; } else return NULL; }
뭐 이런 코드가 있었지만...
void* aligned = (void*)(((long)ptr + alignment) & ~(alignment - 1)); ((void**)aligned)[-1] = ptr;
이 두 line이 (아마 가장 중요하겠지만?) 무슨 역할을 하는지..
좀 설명해주실 수 없나요? ^^;
Forums:
메모리를 alignment값(alignment는 1<<n)단위
메모리를 alignment값(alignment는 1<<n)단위로 할당하는것을 말합니다.
(size + alignment) & ~(alignment-1) 를 하면 size보다 큰 수중 가장 작은 alignment의 배수가 됩니다. 값을 16진수로 비교해보시면 금방 이해가 되실것입니다.
댓글 달기