을 사용하지 않고 malloc
라이브러리 함수를 구현할 수 있습니까? sbrk(0)
을 사용하여 프로그램 중단의 현재 위치를 확인한 다음 sbrk(size)
을 사용하여 증가시킬 수 있습니까?brk() 시스템 콜을 사용하지 않고 Malloc 함수를 구현할 수 있습니까?
그렇다면 brk
은 (는) 왜 처음에 추가 되었습니까?
을 사용하지 않고 malloc
라이브러리 함수를 구현할 수 있습니까? sbrk(0)
을 사용하여 프로그램 중단의 현재 위치를 확인한 다음 sbrk(size)
을 사용하여 증가시킬 수 있습니까?brk() 시스템 콜을 사용하지 않고 Malloc 함수를 구현할 수 있습니까?
그렇다면 brk
은 (는) 왜 처음에 추가 되었습니까?
대부분의 최신 유닉스에서는 brk
과 sbrk
의 사용을 권장하지 않습니다. 대신 malloc
은 익명으로 (파일 백업없이) mmap
을 호출하고 페이지의 주소가 반환됩니다.
brk
및 sbrk
은 더 이상 적용되지 않는 인접한 주소 공간을 가정합니다. 요즘에는 프로세스가 서로 다른 범위에서 많은 매핑을 가질 수 있으며 중간에 매핑되지 않은 간격이 있습니다.
BRK의 동작()와 응용 프로그램은 또한의 malloc(), mmap에 같은 다른 메모리 기능을 (사용하는 경우는 sbrk()가 지정되지 않은() :
POSIX 표준은 또한 우리에게 그 경고 , free()). 다른 기능은 이러한 다른 메모리 기능을 자동으로 사용할 수 있습니다.
'brk'과'sbrk'에 대해서 언급 했으니 유닉스 (또는 유닉스 계열) 시스템에 있다고 가정 했습니까? 그런 다음 익명 [ "파일"매핑] (http://man7.org/linux/man-pages/man2/mmap.2.html)을 사용하여 유사한 작업을 수행 할 수 있습니다. –
마찬가지로,'malloc (n)'은'realloc (0, n)'에 의해 구현 될 수 있습니다. 그렇다고'malloc()'이 쓸모 없다는 의미는 아닙니다. –