2017-09-14 21 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

相关问题