Pregunta

Me estoy haciendo un poco de programación gráficos y estoy usando piscinas vértice. Me gustaría ser capaz de asignar un rango fuera de la piscina y utilizar esto para el dibujo.

¿Cuál es diferente de la solución que necesito que de un asignador de C es que nunca me llamo malloc. En lugar de eso asignar previamente la matriz y luego necesito un objeto que envuelve que hacia arriba y sigue la pista del espacio libre y asigna un rango (un par de comenzar / punteros finales) de la asignación I pase en.

Muchas gracias.

¿Fue útil?

Solución

En general: usted está buscando un Mangager memoria, que utiliza una (ver Wikipedia) bloque de memoria (como el rel="nofollow boost :: piscina como respondida por TokenMacGuy). Ellos vienen en muchos sabores. Consideraciones importantes:

  • tamaño de bloque (fijo o variable, el número de diferentes tamaños de bloque;? Se puede predecir el uso de tamaño de bloque (estadísticamente)
  • eficiencia (algunos directivos tienen 2 tamaños de bloque ^ n, es decir, para su uso en pilas de red donde buscan bloque de mejor ajuste; muy buen rendimiento y sin fragementation a costa de perder la memoria)
  • los gastos de administración (supongo que tendrá muchas, muy pequeños bloques, de modo que el número de enteros y punteros maintainted por el administrador de memoria es importante para la eficiencia)

En el caso de impulso :: piscina, creo que el sencilla segragated almacenamiento es digno de una mirada. Se le permitirá configurar un banco de memoria con diferentes tamaños de bloque para el que se busca un mejor partido para.

Otros consejos

impulsar :: piscina hace esto para usted muy bien!

  

En lugar de eso asignar previamente la matriz y luego necesito un objeto que envuelve que hacia arriba y sigue la pista del espacio libre y asigna un rango (un par de comenzar / punteros finales) de la asignación I pase en.

Eso es básicamente lo que malloc () hace internamente (malloc () puede aumentar el tamaño de este "conjunto preasignado" si se llena, sin embargo). Así que sí, hay un algoritmo para ello. Hay muchos, de hecho, y Wikipedia da una visión general básica. Diferentes estrategias pueden funcionar mejor en diferentes situaciones. (Por ejemplo, si todos los bloques son de un tamaño similar, o si hay algún patrón de asignación y liberación)

Si tiene muchos objetos del mismo tamaño, mira en obstacks.

Es probable que no desea escribir el código usted mismo, no es una tarea fácil y los insectos puede ser doloroso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top