2011-05-12 1 views
3

http://goog-perftools.sourceforge.net/doc/tcmalloc.html 에서 "현재 CMalloc은 시스템에 메모리를 반환하지 않습니다." 나는 그것이 42 메가 비트를 할당하고 free한다면 시스템은 다시 얻지 못할 것이라고 생각하지만, 다음에 나는 47 메가 바이트를 할당하면 단지 5 메가 바이트를 더 훔칠 것이다. 로드 된 dll 또는 .so 모듈을 어떻게됩니까? 그들은 프로그램이 종료 될 때까지 공개되지 않는 메모리 덩어리를 갖게됩니까? 나는 런타임에 업데이트 할 수있는 sw를 작성하고 싶다면 프로그램을 종료하지 않고 새 DLL을로드해야하기 때문에 물어 본다. 그래서 내 질문은 : 내가 사용하는 경우 - ltcmalloc 그리고 나는 지속적으로로드 및 메모리를 할당하고 메모리를 무료로 DLL을 폭발 원인 DLL을 언로 드거야? 나는 바보 같은 질문이라고 추측하지만, 각 dll이 자체 메모리 할당 항목을 사용하는지 또는 mem 할당이 프로세스 수준에 있는지 여부는 알 수 없습니다."TCMalloc은 현재 현재 시스템에 메모리를 반환하지 않습니다."는 의미는 무엇입니까?

+0

나는 tcmalloc 사용에 대해주의를 기울였다. 그것은 "정상적인"malloc보다 ** 많은 메모리 오버 헤드가 ** 많이 듭니다. 그리고 문서의 많은 주장 (주장 된 잠금 비용과 같은)은 실제와는 거리가 멀어 보입니다. 코어 2 개 이상 (코어 8 개 이상)을 사용하고 malloc 바인딩 코드를 모두로드하지 않는 한, tcmalloc이 비용을 감당할 수 있을지는 의문입니다. (그리고 malloc 바인딩은 일반적으로 나쁜 코드를 나타냅니다 ...) –

+0

그것은 Google 코드이므로 좋은 코드 여야합니다. 진심으로 나는 그들이 숫자에 대해 거짓말을하고 있는지 의심 스럽다 ... 만약 당신이 높은 퍼포먼트 malloc 무거운 코드를 가지고 있다면 그것을 시도하고 테스트 할 수있다. – NoSenseEtAl

+0

하이 엔드 제온에서 100ns의 잠금/잠금 해제주기가 소요된다는 주장은 오히려 의심 스럽지만 제 아픈 Atom의 절반보다 적습니다. 벤치마킹에 관해서는 프로그램이 엄청나게 정확하고 정직하지만 프로그램에 많은 수의 스레드 (코어 만)가 있고 'malloc'을 호출하는 것 외에는 관련이 없다고 생각합니다. –

답변

3

메모리는 DLL이 아니라 프로세스에 속합니다. 그래서 메모리는 일반적으로 프로세스가 끝날 때까지 유지됩니다. 이것은 대부분의 malloc 구현의 공통된 특징으로, 여러분이 요구하는 것이 아닙니다.

+1

좋아, 멋지다. 나는 정상적인 구현에서 무료로 OS에 메모리를 반환한다고 생각했다. 어리석은 질문에 대한 미안하지만, 적어도 나는 이것을 읽는 사람들이 뭔가를 배우기를 바랍니다. – NoSenseEtAl

+0

대부분의'malloc' 구현은 모든 큰 덩어리 (> ~ 128k)를 즉시 시스템에 반환하고 힙의 맨 위에 큰 연속 범위를 반환합니다. 나는 tcmalloc 중 하나라고 생각하지 않지만 이전 할 수 있습니다 .. –