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

时间:2011-09-20 15:05:36

标签: c++ struct

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

是否在堆栈或堆上分配了全局/本地结构?例如:

如果此声明在全球范围内

struct symbol {
    char blockID;
    int blockNum;
    int ivalue;  
    double fvalue;
    int reference;
    bool isFloat, isInt, isRef;
    int symbolLength;
} mySymbol;

分配的内存在哪里?

2 个答案:

答案 0 :(得分:8)

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

class A;

void f()
{
 A a;//stack allocated
 A *a1 = new A();// heap
}

答案 1 :(得分:7)

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

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