Monday, April 28, 2008

Memory, advanced memory allocation

메모리 할당과 관련된 커널의 제한 값은 mallopt()를 통해 변경할 수 있다.

#include <malloc.h>
int mallopt(int param, int value);

자세한 옵션값은 ... 넘어가자 ㅡ.ㅡ;

glibc에서 할당된 메모리는 실제보다 클수도 있다. 그래서 실제로 할당된 메모리 사이즈를 malloc_usable_size(void *ptr)를 통해 확인할 수 있다. 또 malloc_trim(size_t padding)함수를 사용하면 padding공간으로 있던 영역을 해제하여 여분의 메모리를 (아주 조금 이겠지만) 확보하는데 일반적으로 이런 과정은 자동으로 이루어진다.

메모리를 디버깅할 때는 MALLOC_CHECK_ 환경 변수를 사용할 수 있다. 아래 처럼 이 값을 1로 주면 동작시에 메모리와 관련된 메세지들을 stderr로 뿌여준다. 2로 설정되어 있는 경우에는 바로 abort()를 호출하고 종료한다.


$ MALLOC_CHECK_=1 ./test

그외에도 사용하고 있는 memory alocation system에 대한 정보를 mallinfo()를 통해서 볼 수 있다(이 함수가 리턴하는 구조체는 return by value이다. 포인터가 아니다). 그리고 malloc_stats()를 호출하면 메모리 관련된 정보를 stderr로 뿌려주기도 한다.

No comments:

Post a Comment