网站建设存在哪些问题,微信公众号网站建设费,餐厅网站建设什么科目,通用网站建设需求分析内存分配方式(内存布局)#xff1a; 内存5分类 堆、栈、自由存储区、全局/静态存储区、常量存储区 #xff08;1#xff09;栈#xff1a;内存由编译器在需要时自动分配和释放。通常用来存储局部变量和函数参数#xff0c;函数调用后返回的地址。#xff08;为运行函数而… 内存分配方式(内存布局) 内存5分类 堆、栈、自由存储区、全局/静态存储区、常量存储区 1栈内存由编译器在需要时自动分配和释放。通常用来存储局部变量和函数参数函数调用后返回的地址。为运行函数而分配的局部变量、函数参数、函数调用后返回地址等存放在栈区。栈运算分配内置于处理器的指令集中效率很高但是分配的内存容量有限。 2堆内存使用new进行分配使用delete或delete[]释放。如果未能对内存进行正确的释放会造成内存泄漏。但在程序结束时会由操作系统自动回收。 3自由存储区使用malloc进行分配使用free进行回收。 4全局/静态存储区全局变量和静态变量被分配到同一块内存中C语言中区分初始化和未初始化的C中不再区分了。全局变量、静态数据 存放在全局数据区 5常量存储区存储常量不允许被修改。 内存3分类 静态区、堆区、栈区 1静态全局存储区——static内存在程序编译的时候就已经分配好这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。也是程序结束后由操作系统释放。 2栈区——stack在执行函数时函数参数局部变量包括const局部变量函数调用后返回的地址都在栈上创建函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中效率很高但是分配的内存容量有限。 3堆区——heap亦称动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存程序员自己负责在适当的时候用free或 delete释放内存。动态内存的生存期可以由我们决定如果我们不释放内存程序将在最后才释放掉动态内存。 但是良好的编程习惯是如果某动态内存不再使用需要将其释放掉否则我们认为发生了内存泄漏现象。 另一种内存五分类 栈、内存映射段、堆、数据段、代码段 1栈又叫堆栈非静态局部变量/函数参数/返回值等等 还有每次调用函数时保存的信息。每当调用一个函数时返回到的地址和关于调用者环境的某些信息的地址比如一些机器寄存器就会被保存在栈中。然后新调用的函数在栈上分配空间用于自动和临时变量。 2内存映射段是高效的I/O映射方式用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存做进程间通信。 3堆用于程序运行时动态内存分配堆是可以上增长的。堆区域从BSS段的末尾开始并从那里逐渐增加到更大的地址。堆是由程序员自己分配的。堆区域由所有共享库和进程中动态加载的模块共享。 4数据段分为初始化数据段和未初始化数据段。初始化的数据段通常称为数据段是程序的虚拟地址空间的一部分它包含有程序员初始化的全局变量和静态变量可以进一步划分为只读区域和读写区域。未初始化的数据段通常称为bss段这个段的数据在程序开始之前有内核初始化为0包含所有初始化为0和没有显示初始化的全局变量和静态变量。 5代码段也叫文本段是对象文件或内存中程序的一部分其中包含可执行代码和只读常量。文本段在堆栈的下面是防止堆栈溢出覆盖它。通常代码段是共享的对于经常执行的程序只有一个副本需要存储在内存中代码段是只读的以防止程序以外修改指令。