top可能显示内存使用不正确
top may be showing incorrect memory usage
我正在Mac操作系统上编写一个简单的C++程序。我只有
int main()
{
int *n = new int[50000000];
}
我在lldb中启动这个程序,并在分配n
的行中放置一个断点。然后我在另一个选项卡中启动top
,我看到内存使用量是336K预分配。当我在lldb中执行n
时,为了进行n的分配,我预计我的内存使用率会上升。然而,顶部显示了我的程序使用的相同内存量。这可能是什么原因?我试图理解C++中内存分配是如何发生的,这就是我这样做的原因。
我还没有退出main的范围。当我再次检查顶部时,我坐在主花括号的末尾。
top
命令显示操作系统查看的进程统计信息。它显示了有多少内存被分配给进程,但没有显示有多少内存在有效使用。它不适用于监视内存分配。
堆和空闲存储的内存分配在C++中取决于实现。但是tt通常不会通过操作系统分配调用进行一一映射。出于性能原因(对操作系统的调用比用户代码内部的调用慢),从操作系统接收的内存分为较大的块:
- 当c++运行时启动时,它通常会从操作系统中分配一些内存,以便为标准库对象分配所需的内存,并初始化空闲存储以快速满足分配请求
- 只有当这个初始内存耗尽时,标准库才会从操作系统中分配更多内存
- 并且在较大的块中再次进行分配,因此不是每个
new
都会引发一个OS调用
根据您的观察,我猜这个初始分配大于50MB。尝试使用更大的值来查看差异。
如果您想更精确地跟踪内存消耗,您需要一些评测工具,例如valgrind
或heap
命令
相关文章:
- 使用2个键的cpp-stl::优先级队列排序不正确
- 正弦级数方程计算不正确
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 密码登录程序将永远循环并显示不正确的结果
- 在C++中返回不正确的楼层函数值
- 形状对象的旋转和缩放不正确C++
- C++ 读取文件读取文件不正确
- 关于类的 Python 文档 - 对C++的引用不正确
- std::unordered_map析构函数不释放内存?
- 特征 LLT 模块给出不正确的结果?
- glibcxx STL 在实现 std::valarray::sum() 时是否不正确?
- 我是否访问了已释放的内存,或者在这种情况下DrMemory报告不正确?
- 不正确的 Vulkan 统一缓冲区内存对齐
- Valgrind 未显示使用不正确的 c_str() 的无效内存访问
- 如何正确关闭QWebView而不导致内存泄漏
- 使用结构数组分配不正确的内存
- 从浮点到十六进制的转换在写入内存时不正确
- 动态多态内存容器-返回值不正确
- top可能显示内存使用不正确
- OpenCL 内核_local内存行为不正确