动态分配指针数组及其替代方案

2 c++ arrays pointers memory-management dynamic-allocation

使用new int分配数组的标准方法是:

 int* arr = new int[50];
Run Code Online (Sandbox Code Playgroud)

在以这种方式声明它的同时,将存在连续的内存分配,并且变量堆栈中将存在单个数组变量.

如果我想以50个不同的指针变量的形式声明它,以便每个指针具有不同的内存地址,而不一定是连续的,最明显的方法是这样:

int * arr[50];
Run Code Online (Sandbox Code Playgroud)

但是以这种方式分配内存的命令/代码(即通过new int)以及以各种方式声明的缺点或优点是什么.

use*_*661 5

显而易见的方法是迭代所有元素并为它们分配内存:

for (int i = 0; i < 50; i++){
    arr[i] = new int;
}
Run Code Online (Sandbox Code Playgroud)

非连续内存块的缺点是缓存未命中.你可以在这里阅读更多内容.

  • for(int i = 0; i <sizeof(arr)/ sizeof(int); ++ i)//避免在两个地方保持常数50 (2认同)