簡體   English   中英

動態二維數組非連續內存C ++

[英]Dynamic 2d Array non contiguous memory c++

假設我將2d數組的地址以及2d數組的行和列傳遞給了一個函數。

該函數會將2d數組的地址視為1d數組。 (例如int matrix [])

如果我執行以下代碼:

    int** arr;

    arr = new int*[row];

    for ( int i = 0; i < row; i++ )
    {

        arr[i] = new int[column];
    }
  1. 假設地,我認為在多線程系統中,這可能不會為2d數組分配連續的內存。 我對么?

  2. 但是,我認為在單線程系統中,這將為2d數組分配連續的內存。 我對嗎? 如果是這樣,這是否“總是”正確? 還是取決於編譯器和操作系統?

  3. 如果代碼現在是這樣:

     int** arr; int** arr2; arr = new int*[row]; arr2 = new int*[row]; for ( int i = 0; i < row; i++ ) { arr[i] = new int[column]; arr2[i] = new int[column]; } 

    我沒有連續的內存二維數組。 即使每行中的元素是連續的,行本身也不會與下一行連續。 我對么?

  4. 如果以上所有內容都正確,那么在C ++中,不是每個2d數組都是連續內存,對嗎?

  1. 真正
  2. 實際上,在大多數情況下可能是正確的,盡管可能取決於實現,但是不同的內存分配策略可能以不同的方式進行處理,不太可能是標准定義的。 還取決於內存碎片。
  3. 再次正確。
  4. 錯誤,因為最典型的2D數組如下所示,並且它將具有連續的堆棧內存

     int my2DArr[5][5]; 

在您提到的所有情況下,都無法保證您將獲得兩個相鄰行的連續內存位置。 考慮一下:如果在為第一行分配了N個存儲單元之后又占用了接下來的N個存儲單元,該怎么辦? 然后,第二行將不會與第一行相鄰。 但是,如果您的2D陣列很小,這種情況將很少見。

暫無
暫無

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

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