嵌入式学习小组
直播中

王晾其

7年用户 983经验值
私信 关注

探讨一下内存空间分布及堆栈的区别

内存的空间是怎样去分布的?
数据结构的堆栈与内存中的堆栈有何区别呢?

回帖(1)

李欣海

2021-12-24 17:46:02
内存空间分布


数据段 = 全局 + 只读
内存中的栈区处于相对高的地址,如果以地址的增长的方向为上的话,栈地址是向下增长、堆地址是向上增长。
数据结构的堆栈
栈:一种先进后出的数据结构
堆:堆可以被看成是一棵树,如:堆排序
内存中的堆栈
栈:由操作系统(编译器)自动分配、释放,存放函数的参数值,局部变量等,被调用时处在存储空间中,调用完毕立即释放。
堆:一般由程序员申请、分配、释放,通过new 、malloc等
比较
回收方式
栈:自动分配,自动回收,比如定义一个char a;
栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行过程中,运行后就释放掉,不可以再访问。
堆:程序员按需申请需要的大小空间,例如:
malloc(5 * sizeof(int) );
开辟个5个整形数据大小的空间,只要程序员不free()就一直可以访问到,不过这是危险的,忘记释放会造成内存泄漏。
申请效率
栈:由系统分配,速度较快。
栈:由new分配的内存,一般速度比较慢。
申请大小
栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存区域。指栈顶的地址和栈的最大容量是系统预定好的。所以,能从栈获得的空间较小。
栈:堆是向高地址扩展的数据结构,是不连续的内存分布。因为系统是用链表来储存空闲内存地址的。所以,堆课获得能申请的空间灵活,也比较大。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分