2010-05-09 5 views
8

Linux 용 GCC에서 컴파일 된 내 C 프로그램 내부의 기본 질문 : 현재 사용중인 프로세스 힙의 양 (malloc 할당) 및 얼마나 많은 양 무료 힙 블록. 표준 라이브러리의 GNU 구현은 정확히 내가 필요한 것을보고하는 mallinfo 기능을 가지고 있지만 32 비트 구성에서만 사용할 수 있으며 AFAIK에는 64 비트에 해당하는 기능이 없습니다 (이유는 누구나 알 수 있습니까?).64 비트 플랫폼에서 GCC의 기본 힙 사용 통계

저는 Linux에서 GCC를 사용하기 때문에 Linux에서이 파일이 필요합니다. 그러나 힙이 시스템에 불투명하다고 가정하므로이 질문에 대답하는 유일한 방법은 표준 라이브러리의 구현에 의해 제공된 수단을 사용하는 것입니다. Windows 플랫폼에서 MSVC 구현에서

mallinfo 기능의 동등한 없다하지만 그래서 하나는 힙에있는 모든 블록을 반복하여 필요한 정보를 계산할 수 있습니다 힙 도보 기능을 거기라고. AFAIK, GNU C 라이브러리에는 힙 워크 인터페이스가 없습니다. (거기 있니?).

그래서 다시 GCC에서 무엇을합니까? 효율적일 필요는 없습니다. 즉, 앞서 언급 한 힙 - 워크 기반 접근법이 저에게 완벽하게 작동 할 것입니다. 얼마나 많은 힙이 사용되고 있고 GCC에서 얼마나 많은 양이 무료인지 알 수 있습니까? mallinfo을 사용하지 않고 현재 힙 아레나 크기 (mallinfo.arena 참조)를 결정하는 방법을 모르지만 malloc 후크를 설치하고 "수동으로"크기를 추적 할 수 있습니다.

+0

이 링크는 귀하가 이야기하는 내용을 다루겠습니까 : http://www.aquaphoenix.com/ref/gnu_c_library/libc_31.html? – Yktula

+0

아마도 ... GCC의 제 버전은'mstats'에 대해 아무것도 모릅니다. 더욱이, 링크하고있는 문서는 GNU 웹 사이트 http://www.gnu.org/s/libc/manual/html_node/index.html#toc_Memory에서 구할 수있는 비슷한 문서와 다르다.'mstats' 대신에 'mallinfo'. 나는 당신의 링크가 GNU C 라이브러리의 오래된 버전으로 연결되는 것으로 생각한다. – AnT

답변

3

This thread from 2004 키 glibc 개발자가 관련되어 있으므로 인터페이스가 이미 ... "구현에 전혀 맞지 않습니다."라는 사실을 나타냅니다., 64 비트 클린 버전을 만드는 데는 작은 점이있었습니다. (mallinfo() 인터페이스는 glibc 용으로 설계되지 않았으며 SUS에 포함될 것으로 간주되었습니다).

정보를 사용하여 수행하려는 작업에 따라 표준 출력으로 출력하는 malloc_stats()을 사용할 수 있습니다. 이는 단지 malloc()의 내부 구현과 일치하도록 변경할 수있는 텍스트 출력이므로, 따라서 합리적인 결과를 산출 할 수있는 이점이 적어도 있습니다.

+0

'mallinfo'의 일부 필드가 다른 구현에 대해 의미가 없지만 현재 힙 사용률 (실제로 사용 된 힙 메모리의 비율과 현재 시스템에서 할당 된 메모리의 비율)을 결정하는 문제는 나를 뭔가로 공격합니다 실생활에서 합리적으로 나타날 수 있습니다. 이것은 즉시 사용할 수있는 것일 필요는 없습니다 (예 :'mallinfo'). 어쨌든, 제 질문은 단지 질문 일뿐입니다. 방법이 있습니까? – AnT

+0

'malloc_stats()'가 당신의 목적을 위해하지 않는 한, "(누구가 그 이유를 알고 있나?)"하위 질문에 그냥 대답하고있었습니다. – caf

관련 문제