¿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;
}

el sonido metálico siempre devuelve 1.

Respuestas a la pregunta(5)

Su respuesta a la pregunta