sas*_*ash 0 c c++ arrays multidimensional-array
在数值计算中,我们经常处理矩阵和张量,但是当我们用C/C++编写代码时,为什么我们总是使用一维数组来表示矩阵和张量?为什么我们不能使用多维数组呢?显然,多维数组更方便,就像在Matlab中一样.多维数组是否会花费太多内存?谢谢你的任何解释.
PS:我正在读一本数值计算代码.三指数张量T(i,j,k)总是由一维阵列T [1]表示,其中l = i + jI + kIJ(IJK分别是指数ijk的维度).我想知道我是否可以在三维数组T [i] [j] [k]中写出张量?
当使用malloc或从免费存储分配数组的内存时,operator new使用1D数组的成本较低.
对于M x N2D阵列,如果使用1D阵列,则需要使用:
T* array = new T[M * N];
Run Code Online (Sandbox Code Playgroud)
如果要在语法形式中使用看起来像2D数组的内容,则需要使用:
T** array = new T*[M];
for ( size_t i = 0; i < M; ++i )
{
array[i] = new T[N];
}
Run Code Online (Sandbox Code Playgroud)
那不是2D数组而是锯齿状数组.
当然,您需要调用来释放反映分配方法的内存.
使用时T**,不仅需要为M指针分配空间,还需要使用1 + N动态内存分配调用,而不是只调用一次动态内存分配.
根据分配和释放内存的调用频率,额外的开销可能很大.
另一个重要问题是,当分配1D阵列的动态内存时,您可以访问一大块连续内存.如上所述分配2D阵列的动态内存时,您不会获得连续的内存.连续内存更适合缓存,可能会影响性能.
| 归档时间: |
|
| 查看次数: |
2210 次 |
| 最近记录: |