内存何时分配给预定义的流对象?
When memory gets allocated to predefined stream objects?
在您开始将此问题标记为重复之前,我已经 this 但它没有回答我的问题。
像 std::cout
、std::cin
这样的流对象是 ostream
和 istream
类 的全局实例。但我的问题是什么时候为这些对象分配内存?这些对象什么时候初始化?是在编译时或运行时分配内存还是 C++ 运行时在调用 main() 之前在运行时初始化这些对象?
std::cout
& std::cin
对象所在的位置:堆栈、堆或数据段?
流对象是全局变量,因此它们将驻留在全局数据段中。他们也可能在内部为缓冲区或他们需要的任何东西分配其他内存。
它们被一些未指定的魔法(=可能是特定于实现的技巧)尽早初始化,但不晚于 main 的第一条语句之前。
这些对象保证在第一次构造类型 std::ios_base::Init 的对象期间或之前初始化,并且可用于静态对象的构造函数和析构函数。
这是 LLVM 实现:
https://github.com/llvm-mirror/libcxx/blob/master/src/iostream.cpp
when memory is allocated to these objects?
与其他具有静态存储持续时间的全局对象同时
When these objects are initialized?
当初始化其他静态对象时,但由于标准授权和库技巧,您将有机会使用它们。
Where std::cout & std::cin object resides: in the stack, heap or data segment?
它们驻留在静态内存中。严格来说C++中没有stack或heap,只有静态、动态和自动内存。确切的位置将取决于库的实现。
在您开始将此问题标记为重复之前,我已经 this 但它没有回答我的问题。
像 std::cout
、std::cin
这样的流对象是 ostream
和 istream
类 的全局实例。但我的问题是什么时候为这些对象分配内存?这些对象什么时候初始化?是在编译时或运行时分配内存还是 C++ 运行时在调用 main() 之前在运行时初始化这些对象?
std::cout
& std::cin
对象所在的位置:堆栈、堆或数据段?
流对象是全局变量,因此它们将驻留在全局数据段中。他们也可能在内部为缓冲区或他们需要的任何东西分配其他内存。
它们被一些未指定的魔法(=可能是特定于实现的技巧)尽早初始化,但不晚于 main 的第一条语句之前。
这些对象保证在第一次构造类型 std::ios_base::Init 的对象期间或之前初始化,并且可用于静态对象的构造函数和析构函数。
这是 LLVM 实现: https://github.com/llvm-mirror/libcxx/blob/master/src/iostream.cpp
when memory is allocated to these objects?
与其他具有静态存储持续时间的全局对象同时
When these objects are initialized?
当初始化其他静态对象时,但由于标准授权和库技巧,您将有机会使用它们。
Where std::cout & std::cin object resides: in the stack, heap or data segment?
它们驻留在静态内存中。严格来说C++中没有stack或heap,只有静态、动态和自动内存。确切的位置将取决于库的实现。