리눅스에서 malloc동작원리가 궁금합니다.
글쓴이: milkrookie / 작성시간: 수, 2013/11/13 - 1:58오후
제가 malloc함수를 구현을 했는데요. brk와 sbrk를 이용해서 구현을 했습니다.
메인함수가 시작되면 brk와 sbrk로 특정 메모리 영역을 할당을 해버리고 그 메모리 안에서만 malloc을 사용하는데요.
제가 작성한 malloc함수로 프로그램을 짜서 실행을 시키면 작동이 잘됩니다.
그런데 메모리 할당된 모습을 보려고 제가 작성한 프로그램을 pin tool을 이용해서 돌리니 메모리를 할당할 수 없다고 에러메세지가 발생해버리네요...(에러메세지는 sbrk를 이용해서 할당이 실패해 반환값이 -1이 나오면 출력하도록 제가 만든 메세지입니다.)
메모리를 처음에 할당하는 방법은 sbrk(Memory_size)를 이용해서 할당을 했습니다.(Memory size는 1.7G정도로 잡은 상태입니다. OS는 우분투 12.04 64bit버전이고요.)
그냥 기본 malloc을 이용해서 작성하면 pin tool에서 잘 돌아가는데 제가 만든 malloc을 이용하면 왜 안돌아가는지 그 이유를 모르겠습니다.
혹시 조언좀 해주실수있나요??
Forums:
glibc malloc() 이라면 소스 보시면
glibc malloc() 이라면 소스 보시면 동작원리 정도는 껌이고요.
brk 가 있는 아키텍쳐라도 항상 brk 만 사용하는 것은 아니고,
malloc 할 때마다 매번 brk 나 mmap(MAP_ANONYMOUS) 가 호출되는 것도 아닙니다.
아무튼... 소스 보셔야 아래 내용이 이해가 가실겁니다.
댓글 달기