2011-12-15 1 views
0

tcmalloc을 uclibc로 이식하려고합니다. Tcmalloc에는 sbrk 함수에 대한 정의가 있으며이 함수는 libc에서 __sbrk를 호출합니다. 반면 Uclibc에는 __sbrk 기능이 없지만 sbrk가 있습니다.함수는 tcmalloc에 ​​대해 c - sbrk로 묶습니다.

tcmalloc sbrk에서 uclibc sbrk를 호출하는 방법에 대한 아이디어가 있습니까?

답변

1

sbrk은 (이전) system call이지만 대부분의 메모리 할당자는 mmap 위에 작성됩니다. 또한 this question

에뮬레이트하지 말고 syscall을 사용해야합니다. 그리고 mmap을 사용하는 것이 더 좋을 것입니다. sbrk

linux kernel에서 더 많은 메모리를 확보하는 유일한 방법은 시스템 호출 (일반적으로 mmap)입니다. 뷰의 응용 (또는 라이브러리) 관점에서

하는 system call (이것은 대부분 SYSCALL, SYSENTER, int 0x80 등과 같은 단일 기계 명령어 인) 원자이다.

+1

'sbrk'는'mmap'보다 더 유용 할 수 있습니다. 왜냐하면 후자가 제자리에서 성장하지 못하기 때문입니다. –

+0

'mmap'은 메모리의 개별 세그먼트를 제공합니다. 제자리에서 성장해야 할 때를 이해할 수는 없습니다. 그리고'MAP_GROWSDOWN'과 아마도'MAP_NORESERVE'도 있습니다. 또한 http://stackoverflow.com/a/8504358/841108 –

+0

을 참조하십시오. 할당하려는 모든 메모리 비트에 대해'mmap()'을 호출하지 않으실 것입니다. 보통 작은 메모리 요청은'sbrk()'를 통해 처리되는 반면, 큰 것들은'mmap()'을 사용합니다. – glglgl