【发布时间】:2017-04-30 01:19:29
【问题描述】:
我对此有几个想法。首先是分配全局变量可能更快,因为它们只在程序第一次生成时分配一次,而局部变量必须在每次调用函数时分配。我的第二个想法是,由于局部变量在堆栈上,它们是通过基指针寄存器访问的,所以每次访问局部变量时,必须将基指针中存储的值递减;全局变量通过它们在数据段中的静态地址直接访问。我的想法准确吗?
【问题讨论】:
-
可以用“是”或“否”回答的问题是 SO 格式的坏问题。
-
这取决于很多因素,但通常关心这个是没有意义的。
-
完全取决于缓存行为。根据使用模式,两者都可能比另一个快 100 倍。
-
没有“堆栈”。只有具有自动存储持续时间的对象,如果它们的地址从未被占用,则可以将其保存在寄存器中。在几乎所有处理器架构上,访问寄存器比访问具有静态存储持续时间(如全局)的对象所需的内存访问要快得多。
-
在堆栈上“分配”一个值不需要额外的工作。堆栈指针只是移动了一个不同的数字。通过堆栈指针偏移一个值的访问时间与通过数据段寄存器偏移它的访问时间相同。所以你的想法大多是错误的。
标签: c variables scope global-variables lifetime