还是要写博客。
今天复习了很多东西。做个简要总结。当然说的都是4G运行内存,32位机下。
空间分配,高地址到低地址依次为:内核,栈,堆,未被初始化的数据区,初始化的数据区,常量区,代码段。
内核,不用讲了。
栈:由高地址往低地址生长。函数调用时操作系统会在栈上开辟空间,是连续的一段空间,大约有2M左右。当函数调用结束时,操作系统会收回开辟的那段空间。栈溢出指的是这2M空间都被占用了,当再有函数被调用时,就不能开辟空间了,异常报错。导致栈溢出。
堆:堆很大,一般有2个G多,由低地址向高地址生长,C上使用malloc函数,C++中使用new关键字来开辟空间。空间是由程序员手动开辟的,所以是不连续的并且还要手动释放开辟的空间,防止内存泄露。堆中有很多零零散散的内存空间,操作系统是使用一个链表来维护堆中这些零零散散的内存,当程序员需要开辟一块空间时,操作系统就会遍历链表找到第一个大于所要开辟的空间的结点对应的空间,分配给程序员,再将分配给程序员多余出来的内存重新添加到链表中,供下次使用。
全局数据区:未被初始化的数据区和初始化的数据区都被称为全局数据区。这里面存放的都是一些静态全局变量,全局变量,静态局部变量。
常量区:这里存放的都是一些在代码使用的常量。
代码区:存放代码的地方,还有一个很重要的是#define MAX 255,此时,
内存空间分配和各种常量与变量
本文介绍了4G运行内存、32位机下的内存空间分配顺序:内核、栈、堆、未初始化数据区、初始化数据区、常量区和代码段。详细讲解了栈的生长方向和栈溢出,堆的动态分配及管理,以及全局数据区和常量区的存储内容。同时,对常量、常变量和各种类型的变量进行了分类和解析,如全局变量、局部变量、静态变量等,明确了它们的存储位置和生命周期。
摘要由CSDN通过智能技术生成