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

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

4

1 回答 1

10

好吧,编译器看到malloc返回值从未使用过,因此它对其进行了优化。如果您想防止malloc调用被优化,即使在-O3您可以使用volatile限定符:

while(count < 30000000){
    void * volatile p = malloc(24);
    count++;
}
于 2013-07-27T15:37:50.893 回答