[英]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.