我正在学习masm32,遵循一些教程。 在一个教程中:http://win32assembly.online.fr/tut3.html 有声明:
LOCAL指令从堆栈为局部变量分配内存 在函数中使用。一堆LOCAL指令必须是 紧接在PROC指令之下。 LOCAL指令是 紧接着是:。 所以LOCAL wc:WNDCLASSEX告诉MASM从堆栈中分配内存 名为wc的变量的WNDCLASSEX结构的大小。我们可以 在我们的代码中引用wc而没有任何困难涉及堆栈 操纵。我想,那真的是天赐之物。缺点是 局部变量不能在它们创建的函数之外使用 并在函数返回时自动销毁 呼叫者。另一个缺点是您无法初始化局部变量 自动因为它们只是动态分配的堆栈内存 输入功能时。您必须手动分配它们 LOCAL指令后的所需值。
我总是被告知堆栈内存是静态的,任何动态分配都是堆。 我们真的可以将那些作为C ++意义上的本地人考虑吗? 在C ++中创建局部变量时,这些变量是否也会在堆栈上动态分配?
答案 0 :(得分:3)
那么我们真的可以将那些作为C ++意义上的本地人考虑吗?在C ++中创建局部变量时,这些变量是否也会在堆栈上动态分配?
在C ++中,本地(自动)变量存在于堆栈中,所以是和是。
它们是动态分配的,因为它们在进入/退出函数时来去。但是,正如您正确指出的那样,这种类型的分配与堆分配有很大不同。
除了堆和堆栈之外,还有第三个变量可以驻留的区域。这是数据段。这是全局以及功能级和类级static
变量存在的地方。