我想知道汇编中的局部变量是否比我们使用的全局变量更快。这样做的背景是我正在使用 win32 api 从一本书中学习一些二维动画。作者使用一个函数来初始化(窗口的创建、注册、显示和更新)程序的主窗口。我用 asm 编写了该函数(只是为了练习一些 asm)。所以,我想知道是否有任何性能优势,因为在我使用的 asm 函数中,WNDCLASSEX 结构是在本地(在堆栈中)创建的。我知道汇编中的局部变量应该更快,但是通过另一个程序(完全在 cpp 中)的反汇编,我注意到编译器也在本地创建了 WNDCLASSEX。这让我对这个话题感到困惑。所以我想知道 asm 代码和 C++ 代码在性能上是否存在差异。
开发人员
最佳答案
栈顶被很多代码触及。这意味着栈顶通常在 CPU 缓存中。访问它比访问其他内存区域(从 .bss
等)更快。
但是对于像 CreateWindow
这样每个程序只调用几次的函数来说,这并不重要。差异小于几百个 CPU 周期。对于代码的其他部分,差异可能更明显。但需要注意的重要一点是,如果您对同一 block 数据重复执行相同的操作,那么数据最终也会进入 CPU 缓存,因此性能差异将被抵消。
关于c++ - 程序集 :are they faster than global variables? 中的局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7780560/