我想问一下执行时间的差异:
a)我们在main()
中声明了变量,并使用参数
b)我们有全局变量并直接从没有参数的函数访问它们
问题是我开始写几篇文章并且刚刚看了几个关于此的讨论,但我还没有编写任何使差异大于几毫秒的应用程序。
答案 0 :(得分:4)
将参数传递给函数涉及通常两个汇编指令之一:push param
(以及后来的pop param
)或mov ax, param
。由于处理器能够在一秒钟内完成(很多),所以这种“优化”很可能会被忽视(整个程序的几毫秒低于误差范围)
在函数参数的位置使用全局变量将导致代码中的大量混乱,几乎无法察觉或可能没有性能提升。
答案 1 :(得分:4)
所有这些都取决于所使用的CPU和编译器。
将参数传递给函数时,可能会发生以下情况之一:
使用全局变量将比使用堆栈快一点。它会比使用CPU寄存器更快:在函数内部,无论如何,在计算之前可能需要将值加载到这样的寄存器中。
应该注意的是,我们在这里和那里讨论一些CPU滴答声。
我的建议:
答案 2 :(得分:2)
堆栈操作非常有效,并且它们的效率更高,因为堆栈很可能位于高速缓冲存储器中。这可能比使用堆栈更快地使用堆栈。
答案 3 :(得分:2)
期望参数传递变量比全局变量快很多。在现代ABI中,函数参数主要通过CPU寄存器传递,CPU寄存器可立即供CPU使用。
必须从(静态)内存中读取全局变量。更糟糕的是,静态内存分配在自己的内存页面上,这通常远离堆栈(或堆)内存。这意味着缓存未命中的可能性更大,这反过来意味着访问可能会消耗大量的CPU周期。
显然,这很大程度上取决于您的使用模式。