2010-05-02 2 views
6

나는 Ubuntu 9.1에서 G ++ 4.4.1의 기본 메모리 할당자가 무엇인지 궁금합니다. multithreaded 환경에서 다른 C++ 할당자를 비교하는 데 관심이 있습니다. 기본 메모리 할당 자에 대한 자세한 정보는 어디서 얻을 수 있습니까?G ++ 4.4.1 기본 할당 자 중 어느 것입니까?

편집 : 새 연산자 및 삭제 연산자를 참조합니다. 유일한 연결은 G ++은 ++ G와 함께 제공 된 libstdC++의 새로운 연산자()에 대한 참조를 생성합니다

감사

+2

음, g ++ (컴파일러) 정말 선택하지 않습니다 6 배 빠른 ptmalloc2 이상)
* nedmalloc은 (
*이 보물은 또한
(소스 매우 빠른 주장) tcmalloc보다 빠른 주장 할당 자 - 할당 자 (기본적으로 libc에서의 구현과) 연결하는 것에 달려있다. 또한 malloc 또는 new 연산자 중 무엇을 의미하는지에 따라 다릅니다. –

답변

1

을 실온 및 pthread를하는 것입니다. 그 다음에는 시스템에 설치된 libc에 정의 된 malloc() (보통 glibc)을 사용합니다.

대부분의 대체 할당자는 해당 구현 중 하나를 가리키며 일반적으로 malloc()을 대체합니다. 예를 들어 Google의 TC Malloc은 공유 라이브러리를 미리로드하기 만하면 사용할 수 있습니다. 컴파일 된 응용 프로그램을 변경할 필요가 없습니다.

1

g ++ 새로운 연산자는 실제로 glibc malloc을 사용하여 구현됩니다.
그런 다음 메모리 할당 자체는 표준 유닉스 시스템 호출 mmap을 사용하여 수행됩니다.

mallinfo을 사용하여 메모리 할당 자에 대한 자세한 정보를 얻을 수 있습니다.
자세한 내용은 Statistics-of-MallocEfficiency-and-Malloc을 참조하십시오.

2

LD_PRELOAD 변수를 사용하여 자신의 할당자를 사용할 수 있습니다.
LD_PRELOAD = "/ 경로/your_lib_exporting_malloc.so"동적 실제로 당신이 제공하는 malloc 수행을 사용하는 동일한 터미널에서의 glibc에 링크 된 응용 프로그램을 실행

.
많은 malloc 구현을 무료로 사용할 수 있습니다.
* TLSF
* jemalloc
* dlmalloc
*이 ptmalloc2은 (더그 레아의 malloc에가, 당 스레드 경기장을 지원하도록 확장.)
*이 TCMalloc (구글의 malloc에는 주장 (더그 레아의 malloc에는 영원히 주변에 있었다) Josh Haberman's blog)

관련 문제