就像標題所說的,當我對任何類型的數字(float,int,double等)執行cout時,它將7個索引分配給堆。有沒有人知道是什麼原因導致了這種行爲,或者是否與我的代碼中的其他內容有關。爲什麼在數字上執行cout會將內存分配給堆?
2
A
回答
-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)
相關問題
- 1. 爲什麼Java使用堆進行內存分配?
- 2. 爲什麼堆棧和堆都需要內存分配
- 3. g ++在堆棧上分配未使用的內存是什麼?
- 4. 什麼大小將被分配給堆棧和數組。數組內存分配是否會疊加或將分別分配
- 5. 在堆上分配的內存大小
- 6. 爲什麼不分配一大堆內存?
- 7. 爲什麼將一個PHP函數分配給一個變量執行它?
- 8. 什麼時候堆內存在一個進程中分開?執行系統調用會發生什麼?
- 9. 爲什麼C++允許將整數分配給字符串?
- 10. 爲什麼將函數分配給直接放在自調用匿名函數之上時執行的變量?
- 11. 將內存分配給三維字符數組會導致分段錯誤
- 12. 爲什麼將Something分配給Something.prototype.constructor?
- 13. 爲什麼不將listbox分配給gridview?
- 14. 內存分配給數組
- 15. 在不同大小的堆棧上執行內存編譯器分配
- 16. 爲什麼我有一個運行時錯誤動態內存分配(堆)?
- 17. 爲什麼在將ShortString分配給字符串時,Delphi會發出警告?
- 18. 爲什麼在堆棧上分配這麼多空間?
- 19. 爲什麼內存分成堆棧和堆?
- 20. C - 將堆內存分配給全局變量
- 21. 爲什麼Haskell在處理字符串時會分配大量內存?
- 22. 爲什麼association.build不會將parent_id分配給它的孩子?
- 23. 將RootViewController分配給UIViewController會發出警告 - 爲什麼?
- 24. 爲什麼在malloc代碼運行之前分配內存?
- 25. 堆內存分配異常
- 26. 堆棧幀內存分配
- 27. 編譯器可以在堆上爲對象分配內存
- 28. C++在堆和堆棧上分配內存?
- 29. 爲什麼python list slice分配會消耗內存?
- 30. 爲什麼不能在add()中執行pop()內的堆棧
COUT是一個對象。初次使用時可以初始化爲懶惰。 – StoryTeller
可能是因爲你的系統不支持打印數字,只有文本,所以'std :: cout'必須將你的數字轉換爲使用內存的文本緩衝區中的文本。 – nwp
請不要鏈接到你的問題中的外部資源,並請將相關信息作爲*文本* *發佈在*問題中,而不是圖像 - 如果可能的話。 –