小编Teh*_*Sen的帖子

当局部变量复制到全局变量时,C++ GCC优化速度会降低

我有一个关于GCC优化标志及其工作原理的问题.

我有一段很长的代码,它利用了所有本地数组和变量.在代码的最后,我将本地数组的内容复制到全局数组.这是我的代码的一个非常简化的示例:

uint8_t globalArray[16]={0};
void func()
{ 
    unsigned char localArray[16]={0};
    for (int r=0; r<1000000; r++)
    {    
        **manipulate localArray with a lot of calculations**
    }
    memcpy(&globalArray,localArray,16);
}    
Run Code Online (Sandbox Code Playgroud)

以下是三种不同场景中代码的近似速度:

  1. 没有 "-O3"优化:3.203s

  2. 随着 "-O3"优化:1.457s

  3. 使用 "-O3"优化而没有最终memcpy(&globalArray,localArray,16);声明:0.015s

在不将本地数组复制到全局数组中的情况下,代码运行速度快了近100倍.我知道全局数组存储在内存中,本地数组存储在寄存器中.我的问题是:

  1. 为什么只将本地数组的16个元素复制到全局数组会导致执行速度慢100倍?我在这个论坛和网上搜索过,我找不到这个特定场景的明确答案.

  2. 有什么办法可以在没有速度损失的情况下提取局部变量的内容吗?

提前感谢任何可以帮助我解决这个问题的人.

c++ arrays performance gcc compiler-optimization

2
推荐指数
1
解决办法
123
查看次数

标签 统计

arrays ×1

c++ ×1

compiler-optimization ×1

gcc ×1

performance ×1