gcc中的编译器优化

ees*_*_cu 3 c compiler-construction optimization

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

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

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

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

rub*_*nvb 6

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

  • 它保证按C标准工作.GCC是否遵循C标准是另一回事. (3认同)