我在一个环境中写作,我不允许在程序启动后分配新内存,也不允许我进行操作系统调用。在追踪页面错误错误(可能是由于无意中违反上述任何一个错误引起的)时,问题就发生在我身上了(因为这个位于我的stt字符串对接中)
是否在堆栈或堆上分配了全局/本地结构?例如:
如果此声明在全球范围内
struct symbol {
char blockID;
int blockNum;
int ivalue;
double fvalue;
int reference;
bool isFloat, isInt, isRef;
int symbolLength;
} mySymbol;
分配的内存在哪里?
答案 0 :(得分:8)
在C ++中,与C#不同,struct
与class
几乎没有区别。 struct
是class
,其默认可见性是公开的。分配是在堆栈上还是在堆中执行取决于您分配实例的方式
class A;
void f()
{
A a;//stack allocated
A *a1 = new A();// heap
}
答案 1 :(得分:7)
它是实现定义的(C ++标准并没有真正谈论堆栈和堆)。
通常,具有静态存储持续时间的对象(例如全局变量)将最终位于地址空间的特殊段中,该段既不是堆栈也不是堆。但具体情况因平台而异。