【问题标题】:MASM locals: dynamically allocated data?MASM locals:动态分配的数据?
【发布时间】:2012-05-14 20:55:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ masm


    【解决方案1】:

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

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

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-10
    相关资源
    最近更新 更多