C中的内存分配模型
在 C 语言中,内存分配主要分为以下几个区域:
一、栈(Stack)
-
存储内容:
- 局部变量:在函数内部声明的变量,包括自动变量和函数参数。
- 函数调用信息:当函数被调用时,会在栈上分配空间来存储函数的返回地址、参数和局部变量。
-
特点:
- 内存由编译器自动管理,分配和释放非常高效。
- 空间相对较小,一般几兆字节到几十兆字节。
- 先进后出(FILO)的数据结构,函数调用结束后,局部变量的内存会自动释放。
二、堆(Heap)
-
存储内容:
- 通过动态内存分配函数(如 malloc、calloc、realloc 等)分配的内存块。
- 可以存储任意大小的数据结构,如大型数组、结构体等。
-
特点:
- 内存由程序员手动管理,需要显式地调用 free 函数释放内存,否则会导致内存泄漏。
- 空间相对较大,可以根据程序的需要动态分配和释放。
- 分配的内存地址是随机的,不像栈那样有固定的增长方向。
三、全局/静态存储区
-
存储内容:
- 全局变量:在函数外部声明的变量,在整个程序的生命周期内都存在。
- 静态变量:使用 static 关键字声明的变量,包括静态局部变量和静态全局变量。
-
特点:
- 在程序编译时分配内存,在程序结束时释放。
- 全局变量和静态变量的初始化只在程序启动时进行一次。
四、常量存储区
-
存储内容:
- 常量字符串、常量数值等不可修改的数据。
-
特点:
- 内存中的数据在程序运行期间不能被修改。
- 通常由编译器分配和管理。
五、代码区
-
存储内容:
- 程序的机器代码。
-
特点:
- 只读区域,存储着程序的指令。
- 由操作系统加载到内存中,在程序运行期间不会被修改。
分类:
【HarmonyOS】
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
2016-08-22 java.lang.IllegalArgumentException: View not attached to window manager