while(count < 30000000){
malloc(24);
count++;
}
上述代码在我的电脑上使用gcc -O0编译大约需要170毫秒。然而,如果使用-Ox(其中x>0)进行编译,优化器会巧妙地发现所请求的内存永远不会被使用,因此将其从优化后的可执行文件中排除掉。它是如何做到这一点的呢?
while(count < 30000000){
malloc(24);
count++;
}
上述代码在我的电脑上使用gcc -O0编译大约需要170毫秒。然而,如果使用-Ox(其中x>0)进行编译,优化器会巧妙地发现所请求的内存永远不会被使用,因此将其从优化后的可执行文件中排除掉。它是如何做到这一点的呢?
编译器发现malloc
的返回值从未被使用,因此将其优化掉了。如果您想防止malloc
调用即使在-O3
下也被优化掉,您可以使用volatile
限定符:
while(count < 30000000){
void * volatile p = malloc(24);
count++;
}
malloc
并认为它是一个没有副作用的函数。 - ouah
2
代表什么意思不太清楚。 - Yu Hao