VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 289|回复: 5

[已解决]从堆中申请内存的作用

[复制链接]
53_avatar_middle
最佳答案
2 
在线会员 发表于 2020-7-13 10:54:51 | 显示全部楼层 |阅读模式
我有个疑问,例如:tcp去连接服务端后,接收服务端数据,直接定义一个pbuff[5000]和从堆里面申请一个5000大小的内存的区别是啥?
为什么我看到这种接收的都是要申请内存的,直接定义一个数组不行吗?
求大神指点。
最佳答案
70_avatar_small
2020-7-13 13:52:39
1.栈分配空间是有限制的,比堆小很多。
   所以一般需要大的buffer都是动态申请的,通过malloc/new(std::nothrow)返回值来判断是否分配成功。
2.堆上分配更灵活,不会浪费空间,用完直接释放。
   堆需要等变量生命周期结束才会释放空间。




上一篇:CImage类如何打开一张大一点的图片
下一篇:while输出数组元素求助
70_avatar_middle
最佳答案
28 
在线会员 发表于 2020-7-13 13:52:39 | 显示全部楼层    本楼为最佳答案   
bestAnswer
1.栈分配空间是有限制的,比堆小很多。
   所以一般需要大的buffer都是动态申请的,通过malloc/new(std::nothrow)返回值来判断是否分配成功。
2.堆上分配更灵活,不会浪费空间,用完直接释放。
   堆需要等变量生命周期结束才会释放空间。
70_avatar_middle
最佳答案
28 
在线会员 发表于 2020-7-13 18:36:00 | 显示全部楼层
nwm 发表于 2020-7-13 16:33
那如果我再声名一个全局的char *类型的list,然后new 出来5000大小的内存,插入到链表中,重复操作,
那 ...

这个list本身 是放在 静态存储区 的,但是这也就只占sizeof(list<char*>) 大小
list 插入 的每一个节点都是 分配在堆上的,
每个节点的内容,也就是你 new出来的多个5000大小的内存 也都是在堆上的
53_avatar_middle
最佳答案
2 
ico_lz  楼主| 发表于 2020-7-13 14:12:33 | 显示全部楼层
tony666 发表于 2020-7-13 13:52
1.栈分配空间是有限制的,比堆小很多。
   所以一般需要大的buffer都是动态申请的,通过malloc/new(std::n ...

直接定义的数组char num【300】这种类型是栈中申请的内存吗?
70_avatar_middle
最佳答案
28 
在线会员 发表于 2020-7-13 14:27:09 | 显示全部楼层
nwm 发表于 2020-7-13 14:12
直接定义的数组char num【300】这种类型是栈中申请的内存吗?

函数里定义的变量都是栈中申请的 ,new/malloc是堆
53_avatar_middle
最佳答案
2 
ico_lz  楼主| 发表于 2020-7-13 16:33:40 | 显示全部楼层
tony666 发表于 2020-7-13 14:27
函数里定义的变量都是栈中申请的 ,new/malloc是堆

那如果我再声名一个全局的char *类型的list,然后new 出来5000大小的内存,插入到链表中,重复操作,
那这个链表是在栈的内存还是算堆的内存?
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2021-1-20 15:55

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表