¿Se permite al compilador optimizar las asignaciones de memoria de almacenamiento dinámico?
Considere el siguiente código simple que hace uso denew
(Soy consciente de que no haydelete[]
, pero no pertenece a esta pregunta):
int main()
{
int* mem = new int[100];
return 0;
}
¿Se permite al compilador optimizar elnew
¿llamada?
En mi investigacióng ++ (5.2.0) y Visual Studio 2015 no optimizan elnew
llamada,mientras que el sonido metálico (3.0+). Todas las pruebas se han realizado con optimizaciones completas habilitadas (-O3 para g ++ y clang, modo Release para Visual Studio).
No esnew
¿Hacer una llamada al sistema bajo el capó, haciendo imposible (e ilegal) que un compilador optimice eso?
EDITAR: Ahora he excluido el comportamiento indefinido del programa:
#include <new>
int main()
{
int* mem = new (std::nothrow) int[100];
return 0;
}
clang 3.0 no optimiza eso ya, peroversiones posteriores hacen.
EDIT2:
#include <new>
int main()
{
int* mem = new (std::nothrow) int[1000];
if (mem != 0)
return 1;
return 0;
}