C程序设计语言--变量在内存中的分布 堆、栈、数据段、bss段、文本段

本文介绍了C程序设计语言中内存的分布,包括文本段、数据段、BSS段和堆栈。文本段存放代码和只读数据;数据段存储已初始化的全局变量和static静态变量;BSS段用于未初始化的全局变量,初始化为0;堆用于动态分配内存;栈则存储局部变量和函数调用参数。理解这些内存区域对于优化程序和排查内存问题至关重要。
摘要由CSDN通过智能技术生成

为了弄清楚这个问题,先看看在C语言中变量的分类首先查看这篇文章。

一、linux的进程内存分布

  1)主要是由从小到大的地址空间分布,从低地址到高地址依次是:文本段(text),数据段,BSS段,堆,栈。

  • 文本段:文本段中存放的是代码,只读数据,字符串常量(我们通常说保存在文字常量中,实际就是在文本段)
  • 数据段:数据段用来存放可执行文件中已经初始化的全局变量,全局变量又可细分为全局变量和程序分配的static静态变量
  • BSS:BSS段包含了程序中未初始化的全局变量,在内存中全局变量全部初始化为0。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。
  • 堆(heap):堆主要用来存放进程中动态分配的内存段,其大小不固定,可动态扩张或缩减。当进程使用malloc等函数分配内存时,新分配的内存就被动态添加到堆上,相当于堆被扩张。当利用free等函数释放内存时,被释放的内存被从堆中剔除,相应于堆被缩减,堆的物理内存是由程序申请,并由程序释放。
  • 栈:栈是用户程序存放临时空间的局部变量,也就是我们所说的{}中定义的变量(但不包括static声明的变量,static意味着变量被存储到数据段)。除此以外,在函数被调用时其参数也被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也被压入栈中,由于栈的先进后出原则,所以栈特别方便用来保存或恢复调用现场,从这个意义上讲,我们可以把堆栈看做一个寄存,交换临时数据的内存区。它是由操作系统分配的,内存的申请与回收都由OS管理。
  • 常量存储区,和“全局/静态存储区”一样,通常是用于那些
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值