首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

谈谈程序的堆和栈

以32位Linux操作系统为例:

如下图:

操作系统给每一个程序都分配了4G的虚拟地址空间,(2^32 = 4,294,967,296),其中内核地址空间为1G,用户地址空间为3G。

在用户地址空间中,从高地址向下分别有环境变量区域,命令行区,栈(Stack),内存映射区,堆(Heap),BSS区(未初始化数据区),初始化数据区,和代码区。

其中栈是由高地址向下增长,堆是由低地址往上增长。

简图如下:

堆里面的数据主要是通过malloc和free管理,(在C++中是new和delete)。

栈里面存放的是函数的返回地址,局部变量,栈顶的位置等信息。

操作系统给每一个程序分配的栈空间是有限的,一般为8MB或者10MB字节,所以需要在写代码时注意,如果局部变量分配的过大,或者函数调用太深,有可能会导致栈溢出,程序崩溃。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190821A04VXT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券