C语言是创建数组快还是动态分配内存快
4个回答
展开全部
动态分配内存是在堆上,直接创建数组是在栈中,虽然都是在内存,但性能还是有点区别的
栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会分到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。
具体到每个场合,两者体现出来的差异又会不同,跟场景复杂度也有很大的关系,栈胜在简洁,堆胜在灵活
栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多),就有可能调用系统功能去增加程序数据段的内存空间,这样就有机会分到足够大小的内存,然后进行返回。显然,堆的效率比栈要低得多。
具体到每个场合,两者体现出来的差异又会不同,跟场景复杂度也有很大的关系,栈胜在简洁,堆胜在灵活
展开全部
创建数组 指的是什么。
直接写 int a[xxx]; 这样吗?
那么是创建数组快。
不过一个是大小不能动态指定(C99除外),一个是小心爆栈
直接写 int a[xxx]; 这样吗?
那么是创建数组快。
不过一个是大小不能动态指定(C99除外),一个是小心爆栈
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
理论上是创建数组快一点,动态分配内存需要系统内存管理算法进行一些必要的计算。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个问题也是有点不知道问什么?
C语言定义数组的时候,会自动为数组分配足够的内存空间。
如果定义了指针,就需要动态分配内存块,并把该内存块的首地址返回给指针。这个时候指针才能用。
所以,我真的不清楚你是问什么?
C语言定义数组的时候,会自动为数组分配足够的内存空间。
如果定义了指针,就需要动态分配内存块,并把该内存块的首地址返回给指针。这个时候指针才能用。
所以,我真的不清楚你是问什么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询