[英]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读取/写入变量。
在当前编译单元(源文件)中未定义的函数中使用a
和b
。
关键字volatile
指示编译器不优化该代码。 这适用于变量和函数。 您甚至可以在内联汇编中执行此操作,这是一个更高级的主题。 看到这个问题 。
它通常在类型说明符之后应用,例如int volatile i = 0;
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.