就像标题所说的,当我对任何类型的数字(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. 为什么BitmapData.copyPixels会分配内存?
- 2. 为什么Java使用堆进行内存分配?
- 3. 为什么堆栈和堆都需要内存分配
- 4. 为什么cout会给'nan'输出?
- 5. g ++在堆栈上分配未使用的内存是什么?
- 6. 什么大小将被分配给堆栈和数组。数组内存分配是否会叠加或将分别分配
- 7. 为什么数组大于分配给它的内存?
- 8. 在堆上分配的内存大小
- 9. 在python上分配堆内存
- 10. 为什么cin.getline分配给字符数组,但使用'='不会?
- 11. 为什么不能将静态类变量分配给堆栈?
- 12. 为什么不分配一大堆内存?
- 13. 为什么将一个PHP函数分配给一个变量执行它?
- 14. 将零分配给指针会销毁分配的内存吗?
- 15. 什么时候堆内存在一个进程中分开?执行系统调用会发生什么?
- 16. 为什么C++允许将整数分配给字符串?
- 17. 将内存分配给递归函数
- 18. 为什么将函数分配给直接放在自调用匿名函数之上时执行的变量?
- 19. 为什么不将listbox分配给gridview?
- 20. 为什么将Something分配给Something.prototype.constructor?
- 21. 将内存分配给三维字符数组会导致分段错误
- 22. 在函数中分配的内存会发生什么?
- 23. Chrome堆堆快照 - 为什么它不显示所有分配的内存?
- 24. 内存分配给数组
- 25. 在不同大小的堆栈上执行内存编译器分配
- 26. 为什么我有一个运行时错误动态内存分配(堆)?
- 27. 为数组动态分配内存(在C中)时,(int *)类型转换会执行什么操作?
- 28. 为什么在堆栈上分配这么多空间?
- 29. 为什么在将ShortString分配给字符串时,Delphi会发出警告?
- 30. 为什么内存分成堆栈和堆?
COUT是一个对象。初次使用时可以初始化为懒惰。 – StoryTeller
可能是因为你的系统不支持打印数字,只有文本,所以'std :: cout'必须将你的数字转换为使用内存的文本缓冲区中的文本。 – nwp
请不要链接到你的问题中的外部资源,并请将相关信息作为*文本* *发布在*问题中,而不是图像 - 如果可能的话。 –