新的不会减less可用内存,直到填充

新的不会减less可用内存,直到填充,第1张

概述新的不会减less可用内存,直到填充

这是使用G ++ 4.1.2在CentOS 64位上的C ++。

我们正在编写一个testing应用程序来加载系统上的内存使用量n千兆字节。 这个想法是整个系统的负载通过SNMP等得到监控。所以这只是一个行使监控的方式。

我们所看到的只是简单的做:

char* p = new char[1000000000];

不会影响所使用的内存,如top或free -m所示

linux系统有限的插件架构?

Sigaction和移植linux代码到windows

为什么不是由linux TAP设备处理的ARP或ICMPv6数据包

CreateMutex – “访问被拒绝”

FillConsoleOutputCharacter / WriteConsoleOutput和特殊字符

一旦内存被写入,内存分配似乎只会变成“真实”

memcpy(p,'a',1000000000); //shows an increase in mem usage of 1GB

但是我们必须写入所有的内存,只需写入第一个元素不会增加使用的内存:

p[0] = 'a'; //does not show an increase of 1GB.

这是正常的,有记忆实际上已经完全分配? 我不确定是否我们正在使用的工具(top和free -m)显示不正确的值,或者在编译器,运行时和/或内核中是否有巧妙的事情发生。

即使在closures优化的deBUGging版本中也可以看到此行为。

这是我的理解,一个新的[]立即分配内存。 C ++运行时是否延迟这个实际的分配,直到它被访问。 在这种情况下,可以将内存不足exception推迟到内存实际分配之后,直到内存被访问?

因为这对我们来说不是一个问题,但是知道为什么会发生这种事情是很好的!

干杯!

编辑:

我不想知道应该如何使用Vectors,这不是OO / C ++ /目前的做事方式等。我只是想知道为什么这样的事情是这样发生的,而不是有build议为尝试它的替代方式。

C#如何更换系统托盘时钟

如何在等待terminalinput的同时处理窗口事件?

叉100同时进行,有时一些进程变成僵尸

通过C ++中的迭代更新string

从shell调用C函数(libcanberra)

请查找过量使用。 linux在默认情况下在访问之前不会保留内存。 如果你最终需要更多的内存,你不会得到一个错误,但是一个随机的进程会被终止。 你可以用/proc/sys/vm/*来控制这个行为。

国际海事组织,过度使用应该是一个过程设置,而不是一个全球性的。 并且默认不应该过度使用。

当您的程序库从 *** 作系统分配内存时, *** 作系统将在进程的虚拟地址空间中保留一个地址范围。 没有理由让 *** 作系统在你使用之前真正提供这个内存 – 就像你演示的那样。

如果你看eg /proc/self/maps你会看到地址范围。 如果您查看top的内存使用情况,您将看不到它 – 您还没有使用它。

关于你的问题的后半部分:

语言标准不允许拖延bad_alloc的任何延迟。 这必须作为新的[]返回一个指针的替代。 以后再也不会发生了!

一些 *** 作系统可能会尝试过量分配内存,并在以后失败。 这不符合C ++语言标准。

总结

以上是内存溢出为你收集整理的新的不会减less可用内存,直到填充全部内容,希望文章能够帮你解决新的不会减less可用内存,直到填充所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1231982.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存