C++二维数组

二维数组是数组的数组

空间分配

  int* Array = new int[50];
  int** A2D = new int*[50];

他们其实都分配了50*4个字节的连续内存,只不过一维数组的元素类型是int,而二维数组的元素类型是int指针。2个操作实际上来说,并没有什么不同:只是分配空间
二维数组的空间此时还未分配完毕

  for(int i = 0; i < 50; i++)
    A2D[i] = new int[5];

此时空间才分配完成,而要释放空间,由于没有delete[][],所以为了避免内存泄漏,我们需要一次释放。

  for(int i = 0; i < 50; i++)
    delete[] A2D[i];
  delete[] A2D;  //最后释放最外层的数组空间

内存碎片

已上处理二维数组的方式,会造成大量内存碎片。我们分配了50个长度为5个整数的内存空间,这50个buffer如果没有特殊的分配方式,会随机散落在内存中,这会影响访问时的缓存命中(cache miss)

一维 or 二维

大多数时候二维数组并没有意义,完全可以使用一维数组代替,获得更好的访问速度。

int* A2D = new int[50 * 5];
posted @ 2022-07-14 17:58  GameSprite  阅读(204)  评论(0编辑  收藏  举报