malloc和gcc优化2

use*_*927 5 c malloc optimization gcc

while(count < 30000000){
    malloc(24);
    count++;
}
Run Code Online (Sandbox Code Playgroud)

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

oua*_*uah 10

那么编译器看到malloc返回值从未被使用过,所以它会优化它.如果你想防止malloc调用被优化,即使-O3你可以使用volatile限定符:

while(count < 30000000){
    void * volatile p = malloc(24);
    count++;
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,您可以使用[`pure`或`const`属性](http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html)来允许优化器对您自己的函数进行类似的优化. (2认同)