2011-02-14 3 views
1

Doug Lea의 malloc.c (Linux x86_64)에서 해킹을하고 있는데 가장 낮은 할당 주소와 할당 된 최상위 주소의 주소를 찾아야합니다. 청크 - 다른 말로하면 할당 된 메모리의 범위 - 물론 mspace의 malloc_state 부기 구조체는 제외됩니다. 이 주소를 어떻게 얻을 수 있습니까? 전체 힙의 범위는 찾지 않고 할당 된 부분의 범위 만 찾고 있습니다. 할당 된 부분에는 일반적으로 가장 낮은 할당 된 덩어리와 가장 높은 할당 된 덩어리 사이에 할당되지 않은 "구멍"이 포함됩니다. 나는 malloc_state 구조체의 least_addr과 top 필드를 사용했다. 이 올바른지? 고맙습니다!malloc.c를 사용하는 힙 할당 메모리 범위

+0

mmap을 통해 할당 된 지역을 어떻게합니까? – user611775

+0

필자는 초기화 할 때 많은 메모리를 mmap-ing하고 나서 malloc을 호출 할 때마다 Doug Lea의 create_mspace_with_base와 mspace_track_large_chunks를 사용한 다음 mspace_malloc을 사용하기 때문에 걱정하지 않습니다. –

답변

1

내가 이해하는 것으로부터, 이것은 효과가있다. Malloc은이 값을 사용하여 메모리를 할당 할 수있는 위치를 정의합니다.

다음은 malloc 구현입니다. 귀하의 질문에 대한 답변을 얻을 수 있습니다.

http://asf.atmel.no/avr32/services/storage/mem_manager/dlmalloc/examples/example1/at32uc3a0512_evk1105/doc/html/a00036_source.html

+0

감사! 나는 이미 Doug Lea의 malloc.c를 가지고있다. 이것은 링크가 간다. 왜 least_addr이 mspace 자체의 주소보다 _lower_ 값을 갖는지 생각해보십시오. malloc_state 구조체가 mspace의 첫 번째 sizeof (struct malloc_state) 바이트를 차지할 것으로 예상 했으므로 least_addr이 바로 뒤에 오게 될 것이지만 내 테스트는 mspace의 포인터 주소보다 더 작은 least_addr 값을 보여줍니다. –