C++ C++;指针数组的内存分配

C++ C++;指针数组的内存分配,c++,C++,我有一个关于内存分配的问题。假设我创建了这样一个指针数组 int **numbers = new int *[1024*1024]; 我假设这需要8MB内存(Mac 64位上的8字节指针),但事实并非如此。仅当为每个指针分配了一个值时,才会分配内存。因此,如果我将所有指针设为NULL,那么我会看到8MB被分配 for(int i=0; i<1024*1024; i++) { numbers[i] = NULL; } for(int i=0;i我猜内存已分配,但未显示在ps/to

我有一个关于内存分配的问题。假设我创建了这样一个指针数组

int **numbers = new int *[1024*1024];
我假设这需要8MB内存(Mac 64位上的8字节指针),但事实并非如此。仅当为每个指针分配了一个值时,才会分配内存。因此,如果我将所有指针设为NULL,那么我会看到8MB被分配

for(int i=0; i<1024*1024; i++)
{
    numbers[i] = NULL;
}

for(int i=0;i我猜内存已分配,但未显示在ps/top结果中[不确定mac中的哪个工具],因为页面未被触摸。

CHK所有的内存相关列

< P>从C++角度看,你的内存分配了,你最好不要被OS所报告的东西混淆。 你的“应用程序”肯定不知道它是否分配了指针——只是你作为程序员有责任在分配之前不使用任何指针


如果对可能的背景感到好奇,可以在这里或其他文章中查找类似的内容。

您正在观察操作系统的一个功能,名为


未分配内存仅获取保留地址空间(进程特定虚拟内存)默认情况下。仅当为其赋值时,页面才实际映射到页面表中的物理地址。

新的
可能只是保留地址空间,并且只在写入内存后提交内存。这是一种常见的优化,由操作系统执行。如果要读取,只需增加混乱,而不是写,所有的指针都是空的,但是在这种情况下你的内存不会增加,因为你只是一遍又一遍地读零页。