[英]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];
}
假設地,我認為在多線程系統中,這可能不會為2d數組分配連續的內存。 我對么?
但是,我認為在單線程系統中,這將為2d數組分配連續的內存。 我對嗎? 如果是這樣,這是否“總是”正確? 還是取決於編譯器和操作系統?
如果代碼現在是這樣:
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]; }
我沒有連續的內存二維數組。 即使每行中的元素是連續的,行本身也不會與下一行連續。 我對么?
如果以上所有內容都正確,那么在C ++中,不是每個2d數組都是連續內存,對嗎?
錯誤,因為最典型的2D數組如下所示,並且它將具有連續的堆棧內存
int my2DArr[5][5];
在您提到的所有情況下,都無法保證您將獲得兩個相鄰行的連續內存位置。 考慮一下:如果在為第一行分配了N個存儲單元之后又占用了接下來的N個存儲單元,該怎么辦? 然后,第二行將不會與第一行相鄰。 但是,如果您的2D陣列很小,這種情況將很少見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.