网站开发西安,湖州注册公司,杭州网站界面设计,刚察县wap网站建设公司目录
内存四区
代码区
全局区
栈区
堆区
内存四区意义#xff1a;
程序运行前后内存变化
程序运行前
代码区
全局区 程序运行后
栈区
堆区
new操作符
基本语法
创建
释放#xff08;delete#xff09; 内存四区 代码区 代码区#xff08;Code Segment…目录
内存四区
代码区
全局区
栈区
堆区
内存四区意义
程序运行前后内存变化
程序运行前
代码区
全局区 程序运行后
栈区
堆区
new操作符
基本语法
创建
释放delete 内存四区 代码区 代码区Code Segment存放程序的机器指令包括函数体的二进制代码。这部分内存由操作系统进行管理是只读的不允许修改。 全局区 全局区Global/Data Segment存放全局变量、static静态变量以及const常量数据。全局变量和静态变量在程序运行期间始终存在而常量数据则通常存储常量字符串等不可修改的数据。这部分内存在程序启动时分配在程序结束时释放。 栈区 栈区Stack用于存储函数的参数值、局部变量以及函数调用时的上下文信息,由编译器自动分配和释放具有后进先出LIFO的特点。在函数调用时会为每个函数帧函数调用的上下文分配一段栈空间函数返回后会自动释放该空间。 堆区 堆区Heap用于动态分配内存程序员可以通过手动管理来申请和释放堆内存。堆区的内存分配和释放不受函数调用的限制需要程序员显式地使用new和delete、malloc和free等操作符来进行内存的分配和释放,若程序员不释放,程序结束时由操作系统回收。堆区的内存空间是不连续的大小相对较大。 内存四区意义 不同区域存放的数据被赋予了不同的生命周期, 让我们可以更灵活地编程 (帮助我们合理管理内存资源提高程序的性能和可维护性) 程序运行前后内存变化 程序运行前 在程序编译后生成了exe可执行程序未执行该程序前分为全局区和代码区两个区域 代码区 存放 CPU 执行的机器指令 代码区是共享的共享的目的是对于频繁被执行的程序只需要在内存中有一份代码即可 代码区是只读的使其只读的原因是防止程序意外地修改了它的指令 全局区 全局变量和静态变量存放在此.全局变量、static 静态变量 全局区还包含了常量区, 字符串常量和其他常量也存放在此. const 常量等 该区域的数据在程序结束后由操作系统释放 程序运行后 多了堆区和栈区栈和堆是在程序运行时动态创建的。在程序运行时根据需要会动态地为局部变量、函数调用等分配栈空间而堆则用于动态分配内存。 栈区 栈区是由编译器自动分配和释放的用于存储函数的参数值、局部变量等数据。栈的分配和释放遵循后进先出的原则LIFO。当程序执行到一个函数时该函数的参数会被压入栈中并在函数执行完毕后自动释放。同样函数内部的局部变量也会在函数执行完毕后被自动销毁。 注意在栈区分配的数据不应返回其地址因为一旦函数执行结束栈上的数据将被清除这意味着返回局部变量的地址可能会导致访问已经释放的内存引发未定义的行为。为了避免这种情况应始终返回指向堆上动态分配的内存的地址或是返回全局变量的地址。 堆区 堆区是由程序员手动分配和释放的需要注意的是如果程序员没有及时释放堆区的内存那么在程序结束时操作系统会回收这些内存。 一般使用new关键字来在堆区动态地分配内存,通过new分配的内存将在堆区中创建并返回该内存的地址。我们可以使用指针来保存这个地址并在适当的时候使用delete关键字释放对应的内存。需要注意的是在使用堆区的内存时要确保正确分配和释放内存否则可能会导致内存泄漏或者因释放已释放内存而产生悬空指针。 new操作符
new 是C中用于动态分配内存的操作符。它可以用来在堆区也称为自由存储区上创建对象或数组。程序员手动开辟手动或者程序结束时自动释放释放内存利用操作符 delete
基本语法 new 数据类型 利用new创建的数据会返回该数据对应的类型的指针
创建
//动态创建单个对象Type* pointer new Type;//Type* pointer new Type(a);//动态创建数组Type* array new Type[size]{a,b,c};//Type* array new Type[size]; 释放delete
//释放对象delete pointer;//释放数组delete[] array;