2011-08-23 5 views
1

일부 리눅스 코드는 100 개 장소에서 malloc을 호출하므로 하나의 청크가 얼마나 큰지 알아야합니다. 일반적으로 이러한 크기를 my_malloc 함수에 기록하지만이 경우에는 그렇게 할 수 없습니다. malloc 하위 시스템에 malloc 된 포인터에 청크 크기를 제공하도록 요청하는 방법이 있습니까?malloc 된 메모리 청크의 크기를 얻으시겠습니까?

+0

밀접한 관련 질문 : http://stackoverflow.com/questions/5451104/how-to-get-memory-block-length-after-malloc –

답변

0

불행히도 그렇게 할 방법이 없습니다.

+0

그럴 수있는 방법은 없지만 해킹이 문제를 디버그하는 것이면 충분히 해킹 할 수 있습니다. –

1
*((size_t *)ptr - 1) & ~7 

/me.

+1

아참. 64 비트 시스템에서 작동하는지 확신 할 수 없습니다. 그리고 나는 거의 128k 정도의 malloc()에 대해 작동하지 않을 것이라고 확신합니다 (glibc는 mmap을 사용할 것입니다). 그러나 빠른 해킹을위한 좋은 아이디어 :-). – Nemo

+0

그리고 심각하게,'int'는 크기를 의미합니까? 예수. '* ((size_t *) ptr-1) & ~ 8' 이상이어야합니다. –

+0

세계 어디입니까? – Daniel

3

가장 좋은 방법은 LD_PRELOAD trick을 사용하여 malloc (정의 here)에 대한 호출을 가로채는 것입니다. 소스 코드를 다시 컴파일 할 필요조차 없습니다.

발견하려는 내용에 따라 Google Perftools도 유용 할 수 있습니다.

+1

LD_PRELOAD 트릭 _is_을 찾으려면 google을 조금 쳐야합니다. 답변도 http://stackoverflow.com/questions/426230/what-is-the-ld-preload-trick에 연결하십시오. – Kimvais

+0

@Kimvais : 글쎄, 나는 샘플 코드에 링크하여, 항상 한 문장 정의보다 나은 것을 알아 냈다 :-). OK 나는 다른 SO 질문에 대한 링크도 추가했습니다. 덕분에 – Nemo

+0

. 나는 생각하는 사람의 종류라고 생각한다. _ 그것이 어떻게 작동 하는가? _ 그것이 무엇보다 재미있는 질문이다. :) – Kimvais

관련 문제