考虑使用 new
的以下简单代码(我知道没有 delete[]
,但它不属于这个问题) :
int main()
{
int* mem = new int[100];
return 0;
}
是否允许编译器优化 new
调用?
在我的研究中,G + + (5.2.0)和 VisualStudio2015并没有优化 new
调用 而 clang (3.0 +)可以。所有测试都启用了完全优化(- O3 for g + + and clang,Release mode for Visual Studio)。
难道 new
不是在底层进行系统调用,使得编译器不可能(也是非法的)优化它吗?
编辑 : 我现在已经从程序中排除了未定义的行为:
#include <new>
int main()
{
int* mem = new (std::nothrow) int[100];
return 0;
}
Clang 3.0不再优化 ,而是优化 后来的版本可以。
EDIT2 :
#include <new>
int main()
{
int* mem = new (std::nothrow) int[1000];
if (mem != 0)
return 1;
return 0;
}