前言
近来学习深觉自己在语言的底层方面理解欠缺, 正好之前有看过一点内存模型相关的文章, 正好就花点时间研究一下这方面相关的知识。以此文整合一下自己学到的知识, 文章中有错误或不足之处还请师傅们斧正。 重点讲堆栈与堆区两个动态区的概念, 简单分析其中的区别和各自的优势。
动态区
栈区(stack)
1.栈区也被称为堆栈, 栈区的分配和释放都由系统自动分配, 栈区存放函数的参数值以及函数的局部变量,以及函数调用开辟的栈帧;按照程序的调用顺序依次入栈。函数结束返回时自动释放空间,栈区使用LIFO结构。 栈区的内存地址是连续且固定长度的。
2. 在Windows中默认栈区大小上限为1M或者2M, 如果在分配内存时剩余栈的空间不足以分配通常会抛出段错误(segmentation fault)或者是缓冲区溢出(Buffer overflow)的异常报错告警, 在Linux系统中栈区的默认上限为8M。
3. 栈是一种限定性线性表,是数据结构的一种。

本文探讨C语言中的内存模型,主要关注动态区的栈区和堆区。栈区由系统自动分配和释放,适用于函数参数和局部变量,速度较快但空间有限。堆区需手动管理,内存不连续,使用malloc等函数分配,易产生碎片。两者在速度、内存管理和使用方式上有显著区别。理解内存模型对于优化代码和防止内存泄漏至关重要。
最低0.47元/天 解锁文章
1524

被折叠的 条评论
为什么被折叠?



