C语言笔试和面试重要知识点——内存分配

今天和大家聊一聊编程语言中我们系统的内存分区是什么样的,这一部分在面试和笔试的时候是考察的一个重点,对于大多数程序员来说,我们可以简单地认为系统的内存分为3个部分:堆、栈和静态区,在学习的时候,很多书籍也没有把内存讲解清楚,导致初学者总是分不清楚,初学者趋势不用划分地很细致,接下来我们都来分别讨论一下各个区内存的作用:

 

 

1、文本段:存放代码和一些只读的数据。

2、静态存储区:static修饰的变量(全局变量和局部变量),静态数据段是存放已经初始化的变量(static int a=10;) .BSS (存放未初始化的全局变量)。例如:static int a=10; 这是初始化好的变量,存放在静态数据段。static int a; 这是没有初始化的变量,存放在BSS段。

3、堆空间:需要手动申请与手动释放,使用是用malloc()函数申请,返回为指向申请到的 地址的首地址的指针,使用结束后应该使用函数free()对其进行释放,否则可能会出现内存泄露;

4、栈区:存放局部变量,系统自动申请与释放,空间比较小。

5、映射区:可以手动申请,手动释放,映射文件,加载动态库。

如果记不住上边的具体分区可以这样回答:

堆:由malloc()系列函数或者new操作分配内存。他的生命周期由free或delete决定,在没有释放之前他们都会一直存在,直到程序结束。其特点就是使用灵活,空间空间比较大,但是容易出错

栈:保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束这些内容也会被自动销毁,其特点就是效率高,但是空间有限。 

静态区:保存自动局部变量和static变量,在整个程序的生命周期内都存在。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值