gpt4 book ai didi

c++ - top 可能显示不正确的内存使用情况

转载 作者:行者123 更新时间:2023-11-30 05:24:49 24 4
gpt4 key购买 nike

我正在 Mac OS 上编写一个简单的 C++ 程序。我刚刚

int main()
{
int *n = new int[50000000];
}

我在 lldb 中启动这个程序,并在分配 n 的行放置一个断点。然后我在另一个选项卡中启动 top,我看到内存使用是 336K 预分配。当我在 lldb 中执行 n 以便分配 n 时,我希望我的内存使用量会增加。但是,top 显示我的程序使用的内存量相同。这可能是什么原因?我试图了解 C++ 中的内存分配是如何发生的,这就是我这样做的原因。

我还没有退出main的范围。当我再次检查 top 时,我正坐在 main 的右花括号处。

最佳答案

top 命令显示操作系统查看的进程统计信息。它显示分配给进程的内存量,但不显示有效使用的内存量。监视内存分配是不准确的。

堆和自由存储的内存分配在 C++ 中依赖于实现。但是 tt 通常不会与操作系统分配调用一对一映射。出于性能原因(对操作系统的调用比在用户空间代码中调用慢),内存以更大的 block 从操作系统接收:

  • 当c++运行时启动时,它通常从操作系统分配一些内存,以便为标准库对象分配它需要的内存,并初始化空闲存储以快速满足分配请求。
  • 只有当初始内存耗尽时,标准库才会从操作系统分配更多内存。
  • 并且再次以更大的 block 进行分配,因此并非每个 new 都会引发操作系统调用。

根据您的观察,我猜这个初始分配大于 50 MB。尝试使用更大的值以查看差异。

如果您想更精确地跟踪内存消耗,您需要一些分析工具,例如 valgrindheap command

关于c++ - top 可能显示不正确的内存使用情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38547423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com