c语言---内存各分区+动态内存分配malloc/free和new/delet

c语言程序的存储区域与const关键字的使用方法
存储内容:

静态区域

1、代码段(code segment/text segment)(在链接之后产生)

只读(而在冯诺依曼结构中,代码段(和数据段在一起)→可写)
包含只读的常数变量,例如字符串常量等。

2、只读数据段(RO data)(在链接之后产生)

3、已初始化读写数据段(data / RW data)(在链接之后产生)

数据段data(又名:数据区、静态数据区、静态区----【已初始化读写数据段(RW data)】):静态区的内容在整个程序的生命周期内都存在,由编译器在编译的时候分配
  ①自动全局变量(显式初始化为非零)
  ②static变量(包括static全局和局部变量)

4、bss段(未初始化数据段)(在程序初始化的时候开辟)

Bss:
①显式初始化为0或者
②并未显式初始化(C语言规定未显式初始化的全局变量值默认为0)
data段:显示初始化非零

动态区域(与程序运行过程中分配释放)

1、栈stack:

保存局部变量。栈上的内容只在函数范围内存在,当函数运行结束的时候,这些内容也会自动销毁。
  效率高但是空间大小有限
  存放普通局部变量(而静态局部变量存放在data段)

2、堆heap:

malloc/free new/delete决定  申请后必须释放,否则栈指针释放,对应内存没有释放导致内存泄漏(但程序结束时自动释放)
  使用灵活,空间比较大,但容易出错。

C语言中的全局区(静态区),实际上对应着下述几个段:
0、代码段text:代码 字符串常量     (冯诺依曼下可写)
1、只读数据段:RO Data  const修饰符的全区变量
2、读写数据段:RW Data   有初始值的全局变量
3、未初始化数据段:BSS Data   未定义(默认缺省0)or显示为0的全局变量

动态内存区:
栈:
堆:

分段与时间的关系

C语言程序分为映像和运行时两种状态。在编译-连接后形成的映像中,将只包含代码段(Text)、只读数据段(R0 Data)和读写数据段(RW Data)。在程序运行之前,将动态生成未初始化数据段(BSS),在程序的运行时还将动态生成堆(Heap

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值