繁体   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