全局结构是在堆栈上还是在堆上分配的?

Ste*_*hen 6 c++ struct

我在一个环境中写作,我不允许在程序启动后分配新内存,也不允许我进行操作系统调用.在追踪页面错误错误(可能是由于无意中违反了上述之一)时,问题就发生在我身上了(因为这个位于我的stt字符串中)

是在堆栈还是堆上分配的全局/本地结构?例如:

如果此声明在全局范围内

struct symbol {
    char blockID;
    int blockNum;
    int ivalue;  
    double fvalue;
    int reference;
    bool isFloat, isInt, isRef;
    int symbolLength;
} mySymbol;
Run Code Online (Sandbox Code Playgroud)

分配的内存在哪里?

Oli*_*rth 9

它是实现定义的(C++标准并没有真正谈论堆栈和堆).

通常,具有静态存储持续时间的对象(例如全局变量)将最终位于地址空间的特殊段中,该段既不是堆栈也不是堆.但具体情况因平台而异.

  • @Stephen:是的.非静态局部变量(更正式地,具有*自动存储持续时间*的变量)出现在堆栈上. (3认同)

Seb*_*Seb 8

在C++中,与C#struct不同,几乎没有差异class.A structclass其默认可见性是公开的.分配是在堆栈上还是在堆中执行取决于您分配实例的方式

class A;

void f()
{
 A a;//stack allocated
 A *a1 = new A();// heap
}
Run Code Online (Sandbox Code Playgroud)