Pregunta

¿Qué nuevo tipo de funcionalidades (para depurar o no) encuentra útil al anular el nuevo operador?

¿Fue útil?

Solución

La razón principal por la que he tenido que sobrecargar new ha sido por el rendimiento. Un ejemplo es asignar una gran cantidad de objetos pequeños, que a menudo es bastante lento con un asignador de propósito general, pero a menudo se puede mejorar un lote con un asignador personalizado.

Otros consejos

Hay muchos casos en los que se debe reemplazar el operador new. Como alguien dijo, es principalmente para la gestión de memoria personalizada.

El principal ejemplo con el que he tratado personalmente fue para los sistemas integrados.

En un sistema integrado, la asignación dinámica de memoria suele ser un problema. Incluso si tiene un sistema operativo incorporado que lo admite, tiene todo tipo de problemas con los que tendrá que lidiar (por ejemplo, los sistemas integrados a menudo deben ser más deterministas que sus contrapartes de PC. Además, puede estar trabajando en un sistema se supone que debe estar activo durante años, en cuyo caso la fragmentación de la memoria es un problema real).

Debido a esto, los sistemas integrados tienden a no permitir completamente la asignación dinámica de memoria.

Por supuesto, en la mayoría de los proyectos de software necesita alguna forma de memoria dinámica, y en esos casos generalmente implementa la suya propia (es decir, tiene algún tipo de grupo de memoria que todos los hilos pueden solicitar) memoria de, etc.).

Para hacer que los proyectos de C ++ utilicen esta asignación de memoria dinámica enrollada a mano de la manera más fácil, he visto que los proyectos anulan el operador nuevo para usar el método de asignación del proyecto.

Bueno, gestión de memoria personalizada y depuración. Eso es todo, y todo lo que puedes obtener también.

Es posible que esté desarrollando una biblioteca que requiera una etapa adicional en la inicialización de ciertos objetos, la sobrecarga le permite hacerlo sin algunas llamadas extra torpes que el usuario de otra manera terminaría teniendo que escribir.

Si está trabajando con SSE / SIMD, generalmente necesita que su memoria esté alineada con 4 palabras, por lo que puede sobrecargar new para que las clases relevantes usen memalign () (mientras que el new predeterminado está haciendo algo equivalente a malloc () ).

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