2009-10-28 9 views
1

사용자 라이브러리에서 malloc 호출을 관리하는 방법. "malloc이 호출 될 때 사용자 공간에서 메모리가 어떻게 할당되는지, 누가 그것을 관리하는지, sbrk()는 커널 공간에 들어가기 위해 호출 됨"에 대한 설명이 필요합니다.동적 메모리 할당

+10

당신은 무슨 뜻인지 설명 할 필요가 있습니다. –

+3

... 검색을 사용하면 필요한 것을 찾을 수 있습니다! – dirkgently

답변

4

함수의 malloc() 패키지가 공간을 관리합니다. sbrk()를 사용하여 시스템에서 상대적으로 큰 메모리 덩어리를 가져오고 사용 가능한 많은 알고리즘 중 하나를 사용하여 요청 된대로 더 작은 청크를 호출자에게 전달합니다. free() 함수는 해제 된 메모리를 '사용 가능 메모리'목록에 다시 저장합니다. 실제로 드물게 운영 체제 자체에 메모리가 다시 릴리스됩니다.

다른 버전의 malloc() 디자인에 대한 기사가 많이 있습니다. malloc()의 많은 디버깅 버전이 있는데, 특히 할당 된 메모리의 남용을 찾습니다. Knuth 'The Art of Computer Programming'에서 메모리 할당에 대해 읽을 수 있습니다. 그것은 나의 기억 봉사에서 볼륨 1에있다.

6

C 런타임 라이브러리는 힙을 관리합니다. 힙에는 사전 할당 된 프리 스토어가 있습니다. 런타임에서 연속 블록을 찾을 수 없으면 운영 체제에서 더 많은 메모리를 요청하려고 시도합니다 (sbrk()).

"out of memory"가 실패한 경우 - malloc()이 널 포인터를 반환합니다. 추가 메모리가 성공적으로 요청되고 수신 된 청크가 더 큰 경우 malloc() 호출자가 청크 블록을 요청한 부분이 분할됩니다. 한 부분은 점유 된 것으로 표시되고 호출자에게 반환되고 다른 부분은 무료 저장소에 추가됩니다.

sbrk()이 성공적으로 반환 된 시점부터 메모리 청크는 호출 프로그램 주소 공간에 속합니다.