2

我正在学习 masm32,遵循一些教程。在一个教程中:http ://win32assembly.online.fr/tut3.html 有说明:

LOCAL 指令从堆栈中为函数中使用的局部变量分配内存。一堆 LOCAL 指令必须紧接在 PROC 指令之下。LOCAL 指令后紧跟 :。所以 LOCAL wc:WNDCLASSEX 告诉 MASM 从堆栈中为名为 wc 的变量分配 WNDCLASSEX 结构大小的内存。我们可以在代码中引用 wc,而不会遇到堆栈操作的任何困难。这真是天赐之物,我想。缺点是局部变量不能在它们创建的函数之外使用,并且会在函数返回给调用者时自动销毁。另一个缺点是您不能自动初始化局部变量,因为它们只是动态分配的堆栈内存 输入函数时。您必须在 LOCAL 指令之后手动为它们分配所需的值。

我一直被告知堆栈内存是静态的,而任何动态分配都是堆内存。那么,我们真的可以将它们视为 C++ 意义上的本地人吗?当您在 C++ 中创建局部变量时,这些变量是否也会在堆栈上动态分配?

4

1 回答 1

3

那么,我们真的可以将它们视为 C++ 意义上的本地人吗?当您在 C++ 中创建局部变量时,这些变量是否也会在堆栈上动态分配?

在 C++ 中,本地(自动)变量存在于堆栈中,所以是的,是的。

它们是动态分配的,因为它们在进入/退出函数时来来去去。但是,正如您正确指出的那样,这种类型的分配与堆分配有很大不同。

除了堆和栈之外,还有第三个区域可以存放变量。它是数据段。它是全局以及函数级和类级static变量所在的位置。

于 2012-05-14T20:58:58.843 回答