2017-09-14 75 views
2

就像標題所說的,當我對任何類型的數字(float,int,double等)執行cout時,它將7個索引分配給堆。有沒有人知道是什麼原因導致了這種行爲,或者是否與我的代碼中的其他內容有關。爲什麼在數字上執行cout會將內存分配給堆?

圖像示出的行爲: COUT之前被稱爲

,它被稱爲

+3

COUT是一個對象。初次使用時可以初始化爲懶惰。 – StoryTeller

+3

可能是因爲你的系統不支持打印數字,只有文本,所以'std :: cout'必須將你的數字轉換爲使用內存的文本緩衝區中的文本。 – nwp

+2

請不要鏈接到你的問題中的外部資源,並請將相關信息作爲*文本* *發佈在*問題中,而不是圖像 - 如果可能的話。 –

回答

-1

後C++標準庫可以用於內部(特別是緩衝)動態存儲器分配。很可能你的標準C++ input/output library正在使用動態內存(這是非常普遍的)。

(順便說一句,C++標準沒有指定您的實現一臺計算機上運行,​​你可以使用一堆人的奴隸,而不是,但不是道德)

我想這std::cout具有一定的緩衝懶洋洋地分配給您的特定實現(這是操作系統,C & C++標準庫 - 和C++編譯器特定的)。

由於C++的口頭禪不會爲你不使用的東西付錢,所以你的C++實現在懶惰地分配時是正確的。因此,不使用任何標準C++ I/O的假設C++程序將不會消耗您的平臺上的這些字節。

爲了真正瞭解究竟發生了什麼,您需要深入瞭解C++實現(內部)。通過使用free software C++編譯器(一個免費的軟件標準C和C++庫),一個免費的軟件操作系統有助於理解這些細節(因此我建議使用某些Linux發行版),並深入適當的源代碼。否則,花費數月或數年的時間對逆向工程C++實現進行逆向工程(在某些國家,這可能是非法的)。但你不應該在乎(看起來你很遺憾使用一些專有的C++實現,其源代碼可能被禁止研究,而沒有簽署一些代價高昂的NDA)。

也許沖洗或關閉您的std::cout可能會釋放一些內存(但同樣,這是特定於實現的)。

在實踐中,大多數C++程序依賴於許多資源(它間接消耗內存等)。一個明顯的例外是嵌入式世界,您可能會在C++的某些獨立子集中編碼,並仔細選擇您需要使用的C++部分(甚至是間接)。

(顯然是C++標準庫的某些部分是在Windows源的形式提供;但是我沒有用過的Windows)

+0

使用這個平臺來傳播自由/開放源代碼是一件很遺憾的事情。但這不關我的事。 – Mysticial

+4

說「在自由/開放源代碼C++實現的底層上比專有的實現更容易看?」有什麼不對?這是客觀真實的。 – cdhowie

+2

@cdhowie他做的不止於此。你只需要看源代碼。但是過分強調「自由」的方面,坦率地說,與答案無關。 – Mysticial

相關問題