Me gustaría reemplazar el global operator new()
y operator delete()
(junto con todas sus variantes) para hacer algunos trucos de administración de memoria. Me gustaría que todos los códigos de mi aplicación usen los operadores personalizados (incluido el código en mis propias DLL y DLL de terceros). He leído cosas en el sentido de que el vinculador elegirá la primera definición que ve al vincular (por ejemplo, si la biblioteca que contiene su personalizado operator new()
está vinculado primero, "batirá" el enlace con el CRT). ¿Hay alguna manera de garantizar que esto suceda? ¿Cuáles son las reglas para esto, ya que este es realmente un símbolo definido de forma múltiple (por ejemplo, void* operator new(size_t size)
tiene dos definiciones en el espacio de nombre global)?¿Es posible reemplazar el "operador new() global" en todas partes?
¿Qué pasa con los archivos DLL de terceros que pueden estar vinculados estáticamente con el CRT? Incluso si están vinculados dinámicamente con el CRT, ¿hay alguna manera de lograr que se vinculen con myoperator new()
?
Esto está lleno de peligros. ¿Estás seguro de que quieres hacer esto (s/N)? > –
Los archivos DLL son binarios, por lo que ya se han compilado y vinculado para cuando los hay. – KingRadical
Bastante justo. Solo pregunto porque me sentiría mal si tu próxima pregunta de StackOverflow es "¿cómo puedo recuperar datos en un sistema de producción muy importante?" ;) –