2010-05-02 15 views
6

Me preguntaba cuál es el asignador de memoria predeterminado en G ++ 4.4.1, en Ubuntu 9.1. Estoy interesado en comparar diferentes asignadores de C++ en un entorno multiproceso. ¿Y dónde puedo obtener más información sobre el asignador de memoria predeterminado?¿Cuál es el asignador predeterminado de G ++ 4.4.1?

EDIT: me refiero a los operadores nuevos y eliminar. La única de enlace es a ta y pthread

Regards

+2

Bueno, g ++ (compilador) en realidad no recoger el asignador - el asignador depende de con qué enlace (de forma predeterminada, la implementación en libc). También depende de si te refieres a malloc o al nuevo operador. –

Respuesta

1

G ++ creará referencias al operador nuevo() en libstdC++ que viene con G ++. Eso a su vez usa el malloc() definido en la libc que está instalado en su sistema (generalmente glibc).

La mayoría de los asignadores de reemplazo apuntarán uno de ellos a su implementación, por lo general simplemente reemplazan malloc(). Por ejemplo, puede usar TC Malloc de Google simplemente precargando su biblioteca compartida. No es necesario realizar cambios en la aplicación compilada.

1

El g ++ nuevo operador se implementa de hecho usando glibc malloc.
La asignación de la memoria en sí se realiza utilizando la llamada de sistema unix estándar mmap.

Puede obtener más información acerca de su asignador de memoria usando mallinfo.
Consulte Statistics-of-Malloc y Efficiency-and-Malloc para obtener más información.

2

Puede usar la variable LD_PRELOAD para usar su propio asignador.
LD_PRELOAD = "/ ruta/your_lib_exporting_malloc.so"

La ejecución de cualquier aplicación vinculada de forma dinámica con glibc en el mismo terminal en realidad utilizar la implementación de malloc que ya ha proporcionado.
Muchas implementaciones de malloc están disponibles gratuitamente.
* TLSF
* jemalloc
* dlmalloc (malloc de Doug Lea, ha existido siempre)
* ptmalloc2 (malloc de Doug Lea, extendida para soportar escenarios por subproceso.)
* TCMalloc (malloc de Google, afirma ser 6x más rápido que ptmalloc2)
* nedmalloc (dice ser más rápido que tcmalloc)
* Acumulación, también afirma ser muy rápido
(fuente: Josh Haberman's blog)

Cuestiones relacionadas