malloc和gcc优化2
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++; }