C语言中的内存模型

前言

近来学习深觉自己在语言的底层方面理解欠缺, 正好之前有看过一点内存模型相关的文章, 正好就花点时间研究一下这方面相关的知识。以此文整合一下自己学到的知识, 文章中有错误或不足之处还请师傅们斧正。 重点讲堆栈与堆区两个动态区的概念, 简单分析其中的区别和各自的优势。

动态区

栈区(stack)

    1.栈区也被称为堆栈, 栈区的分配和释放都由系统自动分配, 栈区存放函数的参数值以及函数的局部变量,以及函数调用开辟的栈帧;按照程序的调用顺序依次入栈。函数结束返回时自动释放空间,栈区使用LIFO结构。 栈区的内存地址是连续且固定长度的。

    2. 在Windows中默认栈区大小上限为1M或者2M, 如果在分配内存时剩余栈的空间不足以分配通常会抛出段错误(segmentation fault)或者是缓冲区溢出(Buffer overflow)的异常报错告警, 在Linux系统中栈区的默认上限为8M。

    3. 栈是一种限定性线性表,是数据结构的一种。将线性表的插入和删除操作限制为仅在表的一端进行,通常将表中允许进行插入、删除操作的一端称为栈顶,因此栈顶的当前位置是动态变化的,它由一个称为栈顶指针的位置指示器来指示。同时表的另一端被称为栈底当栈中没有元素时称为空栈。栈的插入操作被形象地称为进栈或入栈(push),删除操作称为出栈或退栈(pop)。 4. 栈指针是一个指向栈区域内部的指针,它的值是一个地址,这个地址位于栈区的下界和栈区的上界之间。栈指针把这个栈区域分为两个部分,一个是已经使用的区域

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值