c++ - 程序集 :are they faster than global variables? 中的局部变量

标签 c++ winapi masm

我想知道汇编中的局部变量是否比我们使用的全局变量更快。这样做的背景是我正在使用 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/

相关文章:

c++ - KEY_WOW64_32KEY 未从 x64 应用程序重定向

c++ - 凭证提供者。显示一种进度条并禁用密码或 PIN 字段

assembly - 何时在 MASM 中将 EXTERNDEF 与 ABS 一起使用?

assembly - 在汇编 x86 中查找字符串中的出现

c++ - 分布在多个文件中的模板

c++ - 读取多个 .txt 文件 c++ linux

c++ - 最小化广度优先搜索的内存使用

winapi - Windows 键盘加速器和子窗口

hyperlink - x86 masm Hello World

c++ - 将 C++ 中的原始字符串数据传递给 Python 程序