簡體   English   中英

何時將內存分配給預定義的流對象?

[英]When memory gets allocated to predefined stream objects?

開始之前,以紀念這個問題,因為重復我已經這樣 ,但它並沒有回答我的問題。

std::coutstd::cin這樣的流對象是ostreamistream類的全局實例。 但是我的問題是何時將內存分配給這些對象? 這些對象何時初始化? 是在編譯時,運行時或C ++運行時分配的內存在調用main()之前在運行時初始化這些對象嗎? std::coutstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM