C - 马洛克和 GCC 优化 2.


while(count < 30000000){
    malloc(24);
    count++;
}

上面的代码在我用 gcc -O0 编译的计算机上运行大约 170 毫秒。但是,使用 x> 0 的 -Ox 进行编译时,优化程序巧妙地计算出所请求的内存永远不会被使用,因此它被排除在优化的可执行文件之外。它是如何做到这一点的?

编译器看到返回值从未使用malloc因此对其进行优化。如果要防止即使在-O3malloc调用也优化,可以使用volatile限定符:

while(count < 30000000){
    void * volatile p = malloc(24);
    count++;
}

相关内容

  • 没有找到相关文章

最新更新