我有一個涉及內存分配的問題。比方說,我創建了一個像這樣的指針數組。指針數組的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