C++ 使用new创建二维数组

#include <iostream>
using namespace std;
void main()
{
//用new创建一个二维数组,有两种方法,是等价的
//一:
int (*p)[10] = new int[5][10];
//二:
int **p = new int* [5];
for(int i=0;i <5;i++)
p[i] = new int[10];
}

以上是一般的程序,需要注意的是,内存空间的划分是5行10列,但是p的维度是按照列,而不是按照行声明的。

在自己编写benchmark,运行在cpu上时,预期是声明16*128的数组,这样每行是128*4 (因为int 4byte)= 512 byte。通过每次间隔128byte读取,唤醒prefetch机制。

但是一开始错误的声明为了new int [128][16],这样第一次读取[32][0],第二次读取[64][0],并不是间隔32*4byte,而是间隔32*4*16=2K的空间。

 

一维数组

  1. 静态 int array[100];   定义了数组array,并未对数组进行初始化
  2. 静态 int array[100] = {1,2};  定义并初始化了数组array
  3. 动态 int* array = new int[100];  delete []array;  分配了长度为100的数组array 
  4. 动态 int* array = new int[100]{1,2};  delete []array; 为长度为100的数组array初始化前两个元素

二维数组

  1. 静态 int array[10][10];  定义了数组,并未初始化
  2. 静态 int array[10][10] = { {1,1} , {2,2} };  数组初始化了array[0][0,1]及array[1][0,1]
  3. 动态 int (*array)[n] = new int[m][n]; delete []array;  // in c++11: auto array = new int[m][n]
  4. 动态 int** array = new int*[m]; for(i) array[i] = new int[n];  for(i) delete []array[i]; delete []array;    多次析构
  5. 动态 int* array = new int[m*n];  delete []array;      数组按行存储
  6. 注意这种方式不可用: int **array = new int[m][n];
  • 48
    点赞
  • 167
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值