簡體   English   中英

指針數組的C ++內存分配

[英]C++ memory allocation for an array of pointers

我有一個涉及內存分配的問題。 假設我創建了一個像這樣的指針數組。

int **numbers = new int *[1024*1024];

我原以為這需要8MB內存(Mac 64位上的8字節指針),但事實並非如此。 僅在為每個指針分配值時分配內存。 因此,如果我將所有指針都置空,那么我會看到8MB被分配。

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

我的應用程序如何知道哪些指針在沒有為其分配內存的情況下分配了值?

從C ++的角度來看,你的內存是在那里分配的。 您最好不要通過操作系統報告來混淆自己。

你的“應用程序”肯定不知道它是否分配了一個指針 - 只是你作為程序員有責任在分配之前不使用任何指針。

如果對可能的背景信息感到好奇,請在此處或其他文章中查看內存過量使用

您正在觀察操作系統的一項功能,稱為過度使用會計

默認情況下,未分配的內存僅獲取保留的地址空間(特定於進程的虛擬內存)。 只有在為其分配值時,頁面才會實際映射到頁表中的物理地址。

我的猜測是內存被分配,但沒有顯示在ps / top結果[不確定mac中的哪個工具]因為頁面沒有被觸及。 chk所有與內存相關的列

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM