gcc中的编译器优化

时间:2014-04-25 12:45:29

标签: c optimization compiler-construction

我有一个C代码,我正在运行一些测试。我需要访问一个数组,但是在“只读”模式下。我正在做这样的事情:

for (int i= 0; i < 1000; i++){
    int a = shared_array[rand() % 64];
    int b = shared_array[rand() % 64];
}

我的问题是:我如何从内存中获取值并确保编译器没有通过删除这些指令来优化它,因为在我的测试中我对这些值没有任何作用。 即使我添加了操作int v = a + b,也不会在其他地方再次使用 v ,因此可以忽略它。

我正在使用gcc和-O3,我需要这样做才能将它与来自其他来源的结果进行比较。

3 个答案:

答案 0 :(得分:6)

强制编译器实际读取其他未使用的变量的典型方法是使其成为volatile。这应该保证编译器在使用时实际从RAM中读/写变量。

答案 1 :(得分:1)

在当前编译单元(源文件)中未定义的函数中使用ab

答案 2 :(得分:0)

关键字volatile告诉编译器不要优化该代码。这适用于变量和函数。您甚至可以在内联汇编中执行此操作,这是一个更高级的主题。请参阅this question

通常在类型说明符之后应用,例如int volatile i = 0;