未开启编译优化时volatile变量为何运行更快?
无优化模式下volatile变量运行更快的疑问
先贴出测试代码:
#include <stdio.h> #include <cstdlib> int main() { long long a = 0; long long until = 1000000000; for (long long i = 0; i < until; i++) { a += i; } printf("%lld\n", a); return EXIT_SUCCESS; }
当给变量a添加volatile限定符后,无优化编译时代码运行速度快了近3倍。
测试平台信息:
- 编译器:g++ 9.4.0
- 系统:Ubuntu 20.04
- 硬件:Intel i7 x86_64
基准测试结果
无优化(-O0)
volatile 499999999500000000 real 0m0.409s user 0m0.405s sys 0m0.004s ==================== normal 499999999500000000 real 0m1.672s user 0m1.672s sys 0m0.000s
开启优化后的情况
Level 1优化(-O1)
volatile 499999999500000000 real 0m0.237s user 0m0.235s sys 0m0.000s ==================== normal 499999999500000000 real 0m0.228s user 0m0.223s sys 0m0.004s
Level 2优化(-O2)
volatile 499999999500000000 real 0m0.237s user 0m0.235s sys 0m0.000s ==================== normal 499999999500000000 real 0m0.228s user 0m0.223s sys 0m0.004s
Level 3优化(-O3)
volatile 499999999500000000 real 0m0.248s user 0m0.248s sys 0m0.000s ==================== normal 499999999500000000 real 0m0.001s user 0m0.001s sys 0m0.000s
我现在搞不懂两个问题:
- 为什么未开启优化时,
volatile变量的访问速度反而更快? - 非
volatile变量为什么没能利用缓存命中来提升速度?
内容的提问来源于stack exchange,提问作者sekomer
相关产品推荐
相关产品推荐

