while(count < 30000000){
malloc(24);
count++;
}
上面的代码在我用 gcc -O0 编译的计算机上运行大约 170 毫秒。但是,使用 x> 0 的 -Ox 进行编译时,优化程序巧妙地计算出所请求的内存永远不会被使用,因此它被排除在优化的可执行文件之外。它是如何做到这一点的?
编译器看到返回值从未使用malloc
因此对其进行优化。如果要防止即使在-O3
中malloc
调用也优化,可以使用volatile
限定符:
while(count < 30000000){
void * volatile p = malloc(24);
count++;
}