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所报告的东西混淆。
你的“应用程序”肯定不知道它是否分配了指针——只是你作为程序员有责任在分配之前不使用任何指针
如果对可能的背景感到好奇,可以在这里或其他文章中查找类似的内容。您正在观察操作系统的一个功能,名为
未分配内存仅获取保留地址空间(进程特定虚拟内存)默认情况下。仅当为其赋值时,页面才实际映射到页面表中的物理地址。新的可能只是保留地址空间,并且只在写入内存后提交内存。这是一种常见的优化,由操作系统执行。如果要读取,只需增加混乱,而不是写,所有的指针都是空的,但是在这种情况下你的内存不会增加,因为你只是一遍又一遍地读零页。