我有一个涉及内存分配的问题。比方说,我创建了一个像这样的指针数组。指针数组的C++内存分配
int **numbers = new int *[1024*1024];
我以为这需要8MB内存(Mac 64位上的8字节指针),但情况并非如此。内存只在每个指针分配一个值时分配。所以,如果我NULL所有的指针,然后我看到8MB被分配。
for(int i=0; i<1024*1024; i++)
{
numbers[i] = NULL;
}
我的应用程序如何知道哪些指针为其分配了一个值而不为其分配内存?
'new'可能只是保留地址空间,并且只有在写入内存后才提交内存。这是一种常见的优化,由操作系统执行。 – Mankarse
只是为了增加混淆,如果您要读取而不是写入所有指针,它们都将为NULL,但在这种情况下,您的内存不会增加,因为您只需读取零页并重新开始。 – Neil