我正在Mac OS上编写一个简单的C ++程序。我刚刚
int main()
{
int *n = new int[50000000];
}
我在lldb中启动此程序,并在分配n
的行中放置一个断点。然后我在另一个选项卡中启动top
,我发现内存使用量是336K预分配。当我在lldb中执行n
时,为了发生n的分配,我希望我的内存使用率会上升。但是,top显示我的程序使用的内存量相同。这可能是什么原因?我试图理解如何在C ++中进行内存分配,这就是我这样做的原因。
我没有退出主要的范围。当我再次检查顶部时,我正坐在关闭大括号的大括号。
答案 0 :(得分:1)
top
命令显示操作系统查看的进程统计信息。它显示了为进程分配了多少内存,但没有显示这些内存有多少被有效使用。监视内存分配不准确。
堆和空闲存储的内存分配在C ++中依赖于实现。但是tt通常不会与OS分配调用一对一映射。出于性能原因(对操作系统的调用比用户空间代码中的调用慢),内存是从较大的块中的操作系统接收的:
new
都会引发OS调用。 根据您的观察,我猜这个初始分配大于50 MB。尝试使用更大的值来查看差异。
如果您想更精确地跟踪内存消耗,则需要一些分析工具,例如valgrind
或heap
command