[英]When memory gets allocated to predefined stream objects?
開始之前,以紀念這個問題,因為重復我已經這樣 ,但它並沒有回答我的問題。
像std::cout
, std::cin
這樣的流對象是ostream
和istream
類的全局實例。 但是我的問題是何時將內存分配給這些對象? 這些對象何時初始化? 是在編譯時,運行時或C ++運行時分配的內存在調用main()之前在運行時初始化這些對象嗎? std::cout
和std::cin
對象駐留在哪里:位於堆棧,堆或數據段中?
流對象是全局變量,因此它們將駐留在全局數據段中。 他們還可能在內部為緩沖區或其他所需的內存分配其他內存。
它們由某些未指定的魔術(可能是實現特定的技巧)盡早初始化,但不得早於main的第一條語句之前進行初始化。
什么時候將內存分配給這些對象?
同時具有靜態存儲持續時間的其他全局對象
這些對象何時初始化?
初始化其他靜態對象后,由於標准的授權和庫技巧,您將有機會使用它們。
std :: cout和std :: cin對象駐留在哪里:位於堆棧,堆或數據段中?
它們駐留在靜態內存中 。 嚴格來說,C ++中沒有堆棧或堆 ,只有靜態,動態和自動內存。 確切的位置取決於庫的實現。
確保在第一次構造std :: ios_base :: Init類型的對象期間或之前初始化這些對象,並且可在靜態對象的構造函數和析構函數中使用這些對象。
這是LLVM的實現: https : //github.com/llvm-mirror/libcxx/blob/master/src/iostream.cpp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.