大家讨论下为啥动态分配二维数组效率会比较低下

dkbrain 2010-03-11 09:06:46
经过我的测试:
int **a;
while(1)
{
a = new int*[1000];
for(int i = 0; i < 1000; i++){
a[i] = new int[1000];
memset(a[i],0,sizeof(int)*1000);}
for(int i = 0; i < 1000; i++)
delete a[i];
delete a;
}


while(1)
{
a = new int*[1000];
memset(a,0,sizeof(int)*1000);
delete a;
}


第一种分配方式占用CPU资源非常的多,而第二种则要小非常多,这是为什么的?
当然我实际中测试的程序并不是这种死循环,但是为了简单表述,只是这样示意下;
请问各位大牛,为什么动态的分配二维数组并初始化会比动态分配以为数组多占用这么多的cpu资源的?
...全文
132 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
oxygen_1 2010-03-11
  • 打赏
  • 举报
回复
什么?
yhp1888 2010-03-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 sandrer 的回复:]
第一个循环你首先申请了1000个指针,然后又循环给每个指针又申请了1000个指针,合共 1000000 个整数,1000000 * 4 个字节的内存!

第二个循环,你只申请了1000个指针、1000 * 4 个字节的内存而已
[/Quote]

同意,一个吃1000000个馒头和吃1000个馒头的效率。
Sandrer 2010-03-11
  • 打赏
  • 举报
回复
第一个循环你首先申请了1000个指针,然后又循环给每个指针又申请了1000个指针,合共 1000000 个整数,1000000 * 4 个字节的内存!

第二个循环,你只申请了1000个指针、1000 * 4 个字节的内存而已
dkbrain 2010-03-11
  • 打赏
  • 举报
回复
int** a
while(1)
{
a = new int*[1000];
for(int i = 0; i < 1000; i++){
a[i] = new int[1000];
memset(a[i],0,sizeof(int)*1000);}
for(int i = 0; i < 1000; i++)
delete a[i];
delete a;
}


int* a
while(1)
{
a = new int[1000];
memset(a,0,sizeof(int)*1000);
delete a;
}


dkbrain 2010-03-11
  • 打赏
  • 举报
回复
int** a;
while(1)
{
a = new int*[1000];
for(int i = 0; i < 1000; i++){
a[i] = new int[1000];
memset(a[i],0,sizeof(int)*1000);}
for(int i = 0; i < 1000; i++)
delete a[i];
delete a;
}


int* a;
while(1)
{
a = new int[1000];
memset(a,0,sizeof(int)*1000);
delete a;
}


现在改正过来了。
yhp1888 2010-03-11
  • 打赏
  • 举报
回复
你在做输入法程序?对汉字码表进行内存分配?
你举例用错了维数,看不懂。
dkbrain 2010-03-11
  • 打赏
  • 举报
回复
但问题是我一直都是循环在分配的。
[Quote=引用 4 楼 yhp1888 的回复:]
相当于:
int a;
for(int i = 0; i < 1000; i++)
{
a=0;
}


int a=0;
___________________________
一个馒头1000口吃和1口吃

[/Quote]
yhp1888 2010-03-11
  • 打赏
  • 举报
回复
相当于:
int a;
for(int i = 0; i < 1000; i++)
{
a=0;
}


int a=0;
___________________________
一个馒头1000口吃和1口吃
dkbrain 2010-03-11
  • 打赏
  • 举报
回复
但一直都在循环分配啊?
其实在实际程序中,二维数组的分配次数和一维数组的分配次数是不同的;
我是每100ms就会循环一次,而每一次循环中,二维数组只是分配一次,而一维数组却循环分配1000次
也就是说它们分配的一维数组次数其实是相同的。
[Quote=引用 1 楼 jennyvenus 的回复:]
new一个大数组要比new 100个小数组多循环99次嘛。

[/Quote]
用户 昵称 2010-03-11
  • 打赏
  • 举报
回复
刚才看走眼了.............
用户 昵称 2010-03-11
  • 打赏
  • 举报
回复
new一个大数组要比new 100个小数组多循环99次嘛。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧