C/C++内存分区

参考百度百科(与以往认知有偏差)
C/C++程序的内存分区(Memory Partition),可划分为四大内存分区:堆、栈、全局/静态存储区和代码区。

堆区
由编程人员手动申请,手动释放,若不手动释放,程序结束后由系统回收,生命周期是整个程序运行期间。使用malloc或者new进行堆的申请,堆的总大小为机器的虚拟内存的大小。(ps-self view: 由malloc申请的叫做堆区,new申请的叫做自由存储区)。

栈区
由系统进行内存的管理。主要存放函数的参数以及局部变量。在函数完成执行,系统自行释放栈区内存,不需要用户管理。整个程序的栈区的大小可以再编译器中由用户自行设定,VS中默认的栈区大小为1M,可通过VS手动更改栈的大小。64bits的Linux默认栈大小维10MB,可通过ulimit -s临时修改。

全局/静态存储区
全局/静态区内的变量在程序编译阶段已经分配好内存空间并初始化。这块内存在程序的整个运行期间都存在,他主要存放静态变量、全局变量和常量。(常量什么时候存在全局/静态区了?)
注意:
1.这里不区分初始化和未初始化的数据区,是因为静态存储区内的变量若不显示初始化,则编译器会自动以默认的方式进行初始化,即静态存储区内不存在未初始化的变量。
2. 静态存储区内的常量分为常变量和字符串常量,一经初始化,不可修改。静态存储内的常变量是全局变量,与局部常变量不同,区别在于局部常变量存放于栈,实际可间接通过指针或者引用进行修改,而全局常变量存放于静态常量区则不可以间接修改。(这里有疑问,如何修改)
3. 字符串常量存储在全局/静态存储区的常量区,字符串常量的名称即为它本身,属于常变量。

代码区
存放程序体的二进制代码。比如所写的函数,都是在代码区。

const int d=1;//栈区
static const int d;//静态常量区

总结
数据区包括:堆,栈,全局/静态存储区。
全局/静态存储区:常量区(静态常量区),全局区(全局变量区),静态变量区(静态区)。
常量区:字符串常量区和常变量区。
代码区:存放程序编译后的二进制代码,不可寻址区。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值