在您开始将此问题标记为重复之前,我已经this,但它没有回答我的问题。
像<{1}},std::cout
这样的流对象是std::cin
&amp;的全局实例。 ostream
个班级。但我的问题是何时将内存分配给这些对象?这些对象初始化后?是否在编译时或运行时分配内存或C ++运行时在调用main()之前在运行时初始化这些对象?
istream
&amp; std::cout
对象驻留在:堆栈,堆或数据段中?
答案 0 :(得分:3)
流对象是全局变量,因此它们将驻留在全局数据段中。他们也可以在内部为缓冲区或其他任何需要的内存分配其他内存。
它们是由一些未指定的魔法(可能是特定于实现的技巧)初始化的,尽可能早,但不迟于主要的第一个声明之前。
答案 1 :(得分:1)
何时将内存分配给这些对象?
与具有静态存储持续时间的其他全局对象
同时初始化这些对象?
当其他静态对象被初始化时,但由于标准授权和库技巧,您将有机会使用它们。
std :: cout&amp; std :: cin对象驻留在:堆栈,堆或数据段中?
它们位于静态内存中。严格来说,C ++中没有堆栈或堆,只有静态,动态和自动内存。确切的地方将取决于库的实施。
答案 2 :(得分:0)
保证在第一次构造std :: ios_base :: Init类型的对象时或之前初始化这些对象,并且这些对象可用于静态对象的构造函数和析构函数。
这是LLVM实现: https://github.com/llvm-mirror/libcxx/blob/master/src/iostream.cpp