繁体   English   中英

gcc中的编译器优化

[英]Compiler optimizations in gcc

我有一个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,我需要这样做才能将它与来自其他来源的结果进行比较。

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

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

关键字volatile指示编译器不优化该代码。 这适用于变量和函数。 您甚至可以在内联汇编中执行此操作,这是一个更高级的主题。 看到这个问题

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM