在 arm64 上测试我的软件时,我遇到了一个奇怪的问题。
我写了一些代码来重现这个问题:
char c;
int sum = 0;
for (int i = 0; i <= 255; i++)
{
c = i;
int a = c * 10;
sum += a;
std::cout << a << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
当我在 Windows(使用 Visual Studio 2017 构建)或 Ubuntu x64(gcc 9.3.0-17)上运行它时,我得到以下结果:
0
10
...
1260
1270
-1280
-1270
-20
-10
sum=-1280
Run Code Online (Sandbox Code Playgroud)
如果我在 Ubuntu arm64 (gcc 9.3.0-17) 上运行相同的代码,我会得到不同的结果:
0
10
...
1260
1270
1280
1290
...
2540
2550
sum=326400
Run Code Online (Sandbox Code Playgroud)
我不知道 arm64 上的 gcc 是否有一些额外的优化(使用 -O3),或者是否有一些我看不到的问题?关于如何解决这个问题的任何想法?