2009-08-09 13 views
11

¿Cuándo debería uno preferir el grupo de objetos sobre los objetos asignados dinámicamente?Grupo de objetos frente a asignación dinámica

Necesito crear y destruir miles de objetos por segundo. ¿Es suficiente por sí solo para decidir a favor del conjunto de objetos?

Gracias.

+0

Como de costumbre, depende. Y si puede usar un conjunto de objetos, obviamente no "necesita" crear y destruir cosas. Entonces necesitamos más detalles. –

Respuesta

7

El costo esperado de destrucción del objeto, desasignación, asignación y construcción es mayor que el costo de reinicialización para un nuevo uso.

+3

Diría que "puede ser bajo": es completamente posible (incluso probable) que la inicialización sea la etapa costosa. –

+0

He reformulado mi respuesta. Al leer las otras respuestas, parece que soy el único que hace una diferencia entre el grupo de objetos (donde uno guarda una lista de objetos construidos para usar) y el grupo de memoria (que es una técnica de administración de memoria donde uno retrasa la desasignación - y a veces la destrucción, a veces la destrucción no se realiza completamente, de modo que se hace en un solo paso). – AProgrammer

+0

No estoy seguro de entender lo que dice aquí. Siempre pensé que el beneficio de un conjunto de objetos era solo la reutilización de memoria. Todos los objetos nuevos deben construirse y todos los objetos viejos deben destruirse de todos modos: ¿no puedes ahorrar en ese momento? –

3

Generalmente, si está creando y destruyendo miles de objetos por segundo, al menos debería usar un conjunto de objetos.

Puede usar un asignador personalizado que asigne exclusivamente objetos de un tamaño específico. Reemplazar nuevo y pre asignar un montón específicamente para sus objetos. Usar un campo de bit y una matriz es relativamente simple.

Básicamente, un montón personalizado es más eficaz en cuanto a la memoria si los objetos son pequeños (la sobrecarga del montón es bastante alta en relación con el tamaño de objetos pequeños); Es mas rapido; Previene la fragmentación del montón; Y es más fácil de depurar.

8

Sí, esto es suficiente para decidir a favor del grupo de objetos.

Citando la documentación Boost

Cuando debo usar la piscina?

Las agrupaciones se utilizan generalmente cuando hay mucha asignación y desasignación de objetos pequeños. Otro uso común es la situación anterior, donde muchos objetos se pueden eliminar de la memoria.

Ver Boost Pool biblioteca

7

Medir, medir, medida. Luego, tendrá , o bien, y no tendrá que depender de la especulación o las pautas.

Además, si todavía está disponible CustomMalloc de Dirk Grunwald, pruébelo. Sintetiza una implementación de malloc que está adaptada a las necesidades de una sola aplicación.

Cuestiones relacionadas