动态2d阵列非连续存储器c++
Dynamic 2d Array non contiguous memory c++
假设我将2d数组的地址及其2d数组的行和列传递给了一个函数。
该函数将把2d数组的地址视为1d数组。(例如int矩阵[])
如果我执行以下代码:
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]; }
我没有连续的内存2d数组。即使每一行中的元素是连续的,行本身也不会与下一行连续。我说得对吗?
如果以上都是正确的,那么在C++中,并不是每个2d数组都是连续的内存,对吧?
- 正确
- 实际上,很多时候可能是真的,可能取决于实现,不同的内存分配策略可能以不同的方式进行,不太可能是标准定义的。也取决于内存碎片
- 同样正确
-
错误,因为最典型的2D阵列如下所示,并且它将具有连续的堆栈内存
int my2DArr[5][5];
在您提到的所有情况下,都无法保证您将获得两个相邻行的连续内存位置。思考一下:如果N个存储单元被分配给第一行,然后接下来的N个单元被占用,会怎么样?那么第二行将不会与第一行相邻。但是,如果您的2D阵列很小,这种情况将很少见。
相关文章:
- 将C#结构的存储器大小与C 结构匹配
- 如何将图像数据从搜索窗口中移动到本地存储器OpenCL
- 如何在以下C程序中计算运行时间内存和最大数据存储器使用情况
- 使用c中的结构的malloc通过大量存储器进行索引
- 请求在C和C 中存储器的缓存
- C .何时删除C风格数组以自由存储器
- 如何使用System()函数[C ]将CMD存储器存储在C 中
- 创建命名共享存储器文件以传输大量数据
- C 将写入VGA文本模式存储器在屏幕上不可见
- C 构造函数存储器同步
- Linux储备存储器以稍后分配C
- SSE4存储器与差分位置进行比较
- C 程序运行为Apache CGI程序无法通过SHMGET访问共享存储器
- 仅读取共享存储器时,静音锁定
- 使用MAP ITERETER可使用不良的存储器
- CUDA中的存储器计算重叠问题
- 可以动态分配和在C 的编译时分配的最大存储器
- Boost Intersocess共享内存:如何在同一计算机上拥有多个不同的共享存储器
- 位字段存储器
- O(1)存储器中的随机序列迭代