C语言内存四区模型详解(未完成)
本文最后更新于:2019年11月14日 晚上
本文是关于C语言的内存四区分布,并未从书上找到相关内容,所以本文的内容依据主要来自 传智播客-黑马程序猿 的教学视频,以及参考自众多博客,会在文末统一附出链接地址。
内存四区模型
概述
C语言程序在被执行过程中,操作系统将程序所占用的内存分为四个区域:栈、堆、全局区以及代码区。每一个程序占用的内存都会有这四个区域。而设计内存四区的目的,就像公司分不同的职位与部分,便于更好的管理,提高工作执行的效率,同时不同区域的变量以及常量的生命周期不同,我们可以根据我们的需要,灵活运用去编程。
- 栈区(stack): 存放函数参数、局部变量等,由编译器自动分配释放。
- 堆区(heap):存放动态分配的数据(malloc/new),由程序猿手动分配释放,程序结束时也会有操作系统自动回收。
- 全局区(global):包含常量、全局变量、静态变量等,文字常量区也包含在内。程序结束后由操作系统释放。
- 代码区(code):存放函数体的二进制代码。
栈区
堆区
全局区
全局区包含常量,静态变量等等。以文字常量区为例。文字常量是只读的,不可以修改。当要使用一段字符串时,会现在文字常量区进行查找,如果有就使用,没有的话就创建。
例子:通过打印地址来验证
1 |
|
输出结果
地址相同,说明一旦文字常量区存在字符串,就不需要再被创建。
以字符串字符数组为例综合说明内存四区分布
参考链接
CSDN博客: C语言程序内存四区(栈区,堆区,全局区,代码区)
CSDN博客: 栈区,堆区,全局区,文字常量区,程序代码区 详解(实际上主要内容是栈和堆的知识)
https://blog.csdn.net/qq_37764129/article/details/80784845
https://www.cnblogs.com/letben/p/5236674.html
https://www.cnblogs.com/shijiaqi1066/p/6146865.html
https://www.jianshu.com/p/98cb5f584a31
https://blog.csdn.net/helloyurenjie/article/details/79795059
https://blog.csdn.net/dajiabudongdao/article/details/51945041
https://blog.csdn.net/ic_tv/article/details/46718907
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!