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

C++ 全局结构是在堆栈上还是在堆上分配的?,c++,struct,C++,Struct,我在一个环境中写作,在这个环境中,我不允许在程序启动后分配新内存,也不允许进行操作系统调用。在跟踪页面错误时(可能是由于无意中违反了上面的一个错误而引起的),我遇到了一个问题(因为这让我在std字符串的屁股上咬了一口) 是否在堆栈或堆上分配了全局/本地结构?例如: 如果此语句在全局范围内 struct symbol { char blockID; int blockNum; int ivalue; double fvalue; int referenc

我在一个环境中写作,在这个环境中,我不允许在程序启动后分配新内存,也不允许进行操作系统调用。在跟踪页面错误时(可能是由于无意中违反了上面的一个错误而引起的),我遇到了一个问题(因为这让我在std字符串的屁股上咬了一口)

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

如果此语句在全局范围内

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

内存分配的内存在哪里?

它是实现的定义(C++标准并没有真正讨论栈和堆)。 通常,具有静态存储持续时间的对象(例如globals)最终将位于一个既不是堆栈也不是堆的特殊地址空间段中。但具体的内容在平台上有所不同。C++中的

< P>,与C语言不同,Stult >与类< /代码>的差别不大。
struct
是默认可见性为public的
类。是在堆栈上还是在堆中执行分配取决于您分配实例的方式

class A;

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

我可能是在抓救命稻草,但我正试图解决一个相当令人恼火的问题,想法也快用完了。既不在堆上,也不在堆栈上,而是在全局对象的内存中。顺便说一句,你可以用一个大的全局对象创建自己的堆。将其与自定义的
std::allocator
相结合,您就可以安全地使用
std::string
std::vector
,等等。您是否考虑过覆盖
::operator new
以断言、异常或使用静态分配的池?@deft\u code`@Mooing Duck我没有考虑这些可能性,但我会考虑使用它们。谢谢我不认为会以任何特殊的方式处理它们,但我想确信后台不会发生内存分配。如果对象是在函数范围内声明的,它会出现在堆栈上吗?@Stephen:是的。非静态局部变量(更正式地说,是具有自动存储持续时间的变量)出现在堆栈上