2011-01-25 17 views
6

Necesito una biblioteca de agrupación de memoria rápida y segura para hilos. He buscado mucho en Google, pero las soluciones rápidas no tienen seguridad de subprocesos, mientras que otras son realmente grandes.C: biblioteca de grupo de memoria?

¿Alguna sugerencia?

+0

¿Por qué no solo malloc()? Es muy lento? ¿Probaste un grupo de subprocesos? Es más rápido, pero desperdicia algo de memoria. –

+0

tengo cientos de malloc/libre por segundo con trozos pequeños (<500b), así que sí, solo free/malloc son muy lentos. También me gustaría obtener una solución segura para hilos, por lo que no tendré problemas con la administración de grupos en los hilos. – Daniel

+0

Considere también la gestión de memoria de arena. Si es adecuado para usted, será mucho más rápido. – Joshua

Respuesta

7

Tanto nedmalloc y ptmalloc son C administradores de memoria de almacenamiento en caché hilo base, extraído principalmente de malloc de Doug lea (el núcleo de la mayoría de los asignadores de Linux). Ambos están bajo buenas licencias también, a diferencia del tesoro, que requiere pago para uso comercial, la última vez que miré. Googles tcmalloc también tiene enlaces C iirc, y está construido desde cero como un asignador de almacenamiento en caché de subprocesos, así como algunas herramientas integradas de generación de perfiles y cpu, sin embargo, está diseñado para el uso masivo de memoria (el ejemplo que dan es de 300 MB + por hilo), y como tal, muchos no funcionan tan bien como se esperaba para aplicaciones de menor escala

+0

¡gracias! nedmalloc es exactamente lo que estaba buscando. – Daniel

0

El funciona bien y no debería ser tan grande.

+0

He intentado apr como primer enfoque y es realmente grande + tiene demasiada API que no usaré en absoluto. – Daniel

2

Se supone que debe usar un grupo de memoria por subproceso.

+2

Tenga en cuenta que si bien esto puede ayudar, todavía hay problemas de subprocesos que requieren atención, mientras que puede asegurarse de que una asignación de un subproceso en particular se pueda dirigir a un grupo particular, debe estar preparado para liberar un bloque para cualquier grupo de cualquier hilo. –

+0

¿por qué se supone que debo usar pools de memoria separados para cada hilo? – Daniel

+0

Esto también puede llevar a una arena de hilo reservando cientos de megas de memoria en su tienda gratuita, muriendo de hambre en otra arena que realmente necesita asignar la memoria – Necrolis

0

¿Has probado Hoard?

Ver también estos twoarticles de Intel.com

+0

lo he visto, pero parece ser más como un hack que se atornilla a la aplicación existente (LD_PRELOAD), mientras que necesito tener cierto control sobre el conjunto (tamaño, tamaño máximo, uso actual, etc ...) – Daniel