首页 > 看了两篇关于优化程序的帖子,其中读到有关全局变量产生的疑惑

看了两篇关于优化程序的帖子,其中读到有关全局变量产生的疑惑

第一篇中提到

尽量少用全局变量,多用局部变量。
因为全局变量是放在数据存储器中,定义一个全局变量,MCU就少一个可以利用的数据存储器空间,如果定义了太多的全局变量,会导致编译器无足够的内存可以分配。而局部变量大多定位于MCU内部的寄存器中,在绝大多数MCU中,使用寄存器操作速度比数据存储器快,指令也更多更灵活,有利于生成质量更高的代码,而且局部变量所的占用的寄存器和数据存储器在不同的模块中可以重复利用。

第二篇中提到
减少函数调用参数
使用全局变量比函数传递参数更加有效率。这样做去除了函数调用参数入栈和函数完成后参数出栈所需要的时间。然而决定使用全局变量会影响程序的模块化和重入,故要慎重使用。

这其中是不是矛盾呢?


这有什么好矛盾的,全局变量和局部变量都各有好处,任何的滥用当然都不好,都要有个度而已。


你这个是说下面两种方法在局部变量的分配上是相同的?

    for(int i=0; i<n; ++i)
        int localvar = 0;

n次循环,局部变量localvar重新分配、释放了n次

void func(int localvar){}
int main(){
    for(int i=0; i<n; ++i) 
           func(j);
}

函数执行了n次,对于函数参数有n次压栈、出栈操作。

【热门文章】
【热门文章】