2011-01-11 20 views
9

Necesito una implementación malloc genérica que utiliza un gran buffer de tamaño fijo. Algo similar al "SQL12 Zero-malloc memory allocator" tiene. ¿Conoces alguna de esas implementaciones? Debe ser liviano y portátil que se pueda usar para aplicaciones integradas.Implementación malloc del buffer de tamaño fijo

Gracias de antemano.

+0

¿Qué pasa con tu malloc? – mathk

+0

@Mathk: fragmentación de la memoria (o no). Desea saber de antemano cuánta memoria kernel asignará al proceso. – Manish

Respuesta

6

dos sugerencias:

  1. SI necesita algo de calidad de producción y bien probado, simplemente prestado asignador de SQLite. El código fuente de SQLite está muy bien escrito, documentado, extremadamente bien probado y tiene una licencia de código abierto muy permisiva.
  2. IF necesita algo pequeño y simple, ya sea para aprender o para usar en un entorno integrado, considere this implementation [plug sin vergüenza!] - solo 350 LOC del código C comentado.
+0

Estoy de acuerdo con algunos de los comentaristas en la publicación a la que se vinculó: este tipo de asignador no hace nada para resolver el problema de robustez de los sistemas integrados (fragmentación catastrófica). OP debería establecer mejor los requisitos y considerar si lo que solicitó realmente puede resolver el problema. –

+0

@R: la falta de fragmentación no era el objetivo de ese asignador, sino que computaba de manera confiable la cantidad total de memoria dinámica requerida por las aplicaciones integradas. –

+1

Gracias. Estaba buscando una implementación simple para fines de prueba. Veo que realloc no está implementado. Estaba planeando usar una gran base de código que también tiene reallocs en uso. Supongo que es mejor implementar el puerto SQLite como lo sugirieron usted y otros. No lo hice porque esperaba que alguien más lo haya hecho Y también porque soy perezoso :) – Manish

4

El código fuente SQLite está disponible gratuitamente. Si te gusta esa implementación en particular, ¿por qué no usarla?

1

Las implementaciones más recientes de malloc funcionan dividiendo una gran parte de la memoria que obtuvieron del sistema operativo. Si ese bloque se agota, malloc solicita al sistema operativo un nuevo bloque grande.

Puede basar su propia implementación en una implementación existente de malloc (por ejemplo, la), y en lugar de obtener un bloque del sistema operativo, utiliza un único búfer estático. Cuando esto se agote, malloc comenzará a fallar, al igual que cuando el sistema operativo no puede proporcionar ningún bloque nuevo.

Cuestiones relacionadas