2014-12-04 1 views
1

을 사용하지 않고 malloc 라이브러리 함수를 구현할 수 있습니까? sbrk(0)을 사용하여 프로그램 중단의 현재 위치를 확인한 다음 sbrk(size)을 사용하여 증가시킬 수 있습니까?brk() 시스템 콜을 사용하지 않고 Malloc 함수를 구현할 수 있습니까?

그렇다면 brk은 (는) 왜 처음에 추가 되었습니까?

+0

'brk'과'sbrk'에 대해서 언급 했으니 유닉스 (또는 유닉스 계열) 시스템에 있다고 가정 했습니까? 그런 다음 익명 [ "파일"매핑] (http://man7.org/linux/man-pages/man2/mmap.2.html)을 사용하여 유사한 작업을 수행 할 수 있습니다. –

+2

마찬가지로,'malloc (n)'은'realloc (0, n)'에 의해 구현 될 수 있습니다. 그렇다고'malloc()'이 쓸모 없다는 의미는 아닙니다. –

답변

4

대부분의 최신 유닉스에서는 brksbrk의 사용을 권장하지 않습니다. 대신 malloc은 익명으로 (파일 백업없이) mmap을 호출하고 페이지의 주소가 반환됩니다.

brksbrk은 더 이상 적용되지 않는 인접한 주소 공간을 가정합니다. 요즘에는 프로세스가 서로 다른 범위에서 많은 매핑을 가질 수 있으며 중간에 매핑되지 않은 간격이 있습니다.

BRK의 동작()와 응용 프로그램은 또한의 malloc(), mmap에 같은 다른 메모리 기능을 (사용하는 경우는 sbrk()가 지정되지 않은() :

POSIX 표준은 또한 우리에게 그 경고 , free()). 다른 기능은 이러한 다른 메모리 기능을 자동으로 사용할 수 있습니다.

관련 문제