首页 > 系统相关 >内存分区模型

内存分区模型

时间:2023-08-29 20:44:06浏览次数:50  
标签:释放 常量 模型 堆区 存放 内存 new 分区

1 内存分区模型

C++程序在执行时,将内存大方向划分为4个区域

  • 代码区:存放函数体的二进制代码,由操作系统进行管理的
  • 全局区:存放全局变量和静态变量以及常量
  • 栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等
  • 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收

内存四区意义:

不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程

1.1 程序运行前

​ 在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域

代码区:

​ 存放 CPU 执行的机器指令

​ 代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可

​ 代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令

全局区:

​ 全局变量和静态变量存放在此.

​ 全局区还包含了常量区, 字符串常量和其他常量也存放在此.

该区域的数据在程序结束后由操作系统释放.

总结

  • C++中在程序运行前分为全局区和代码区
  • 代码区特点是共享和只读
  • 全局区中存放全局变量、静态变量、常量
  • 常量区中存放 const修饰的全局常量 和 字符串常量

1.2 程序运行后

栈区:

​ 由编译器自动分配释放, 存放函数的参数值,局部变量等

​ 注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放

堆区:

​ 由程序员分配释放,若程序员不释放,程序结束时由操作系统回收

​ 在C++中主要利用new在堆区开辟内存

总结:

堆区数据由程序员管理开辟和释放

堆区数据利用new关键字进行开辟内存

1.3 new操作符

​ C++中利用new操作符在堆区开辟数据

​ 堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete

​ 语法: new 数据类型

​ 利用new创建的数据,会返回该数据对应的类型的指针

标签:释放,常量,模型,堆区,存放,内存,new,分区
From: https://www.cnblogs.com/ljh2487/p/17665785.html

相关文章

  • 记录--解决前端内存泄漏:问题概览与实用解决方案
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助内存泄漏是前端开发中的一个常见问题,可能导致项目变得缓慢、不稳定甚至崩溃。在本文中,我们将深入探讨在JavaScript、Vue和React项目中可能导致内存泄漏的情况,并提供详细的代码示例,以帮助开发人员更好地理解和解决这......
  • Linux中Cache内存占用过高解决办法
    https://zhuanlan.zhihu.com/p/200833204一、概述在日常运维中,我们会发现主机内存使用告警,为什么Linux系统没运行多少程序,显示的可用内存这么少?其实Linux与Win的内存管理不同,会尽量缓存内存以提高读写性能,通常叫做CacheMemory。有时候你会发现没有什么程序在运行,但是使用top......
  • Linux中的内存回收[二]
    https://zhuanlan.zhihu.com/p/72998605Linux中的内存回收[一]在NUMA系统中,如果使用页面cache所带来的的收益超过数据存储在不同zone/node的损失,那么可以选择在当前zone内存不足时不进行回收(以保留页面cache),而是使用其他zone/node的空闲内存。反之,如果数据的locality更加重要,......
  • langchain中的LLM模型使用介绍
    简介构建在大语言模型基础上的应用通常有两种,第一种叫做textcompletion,也就是一问一答的模式,输入是text,输出也是text。这种模型下应用并不会记忆之前的问题内容,每一个问题都是最新的。通常用来做知识库。还有一种是类似聊天机器人这种会话模式,也叫Chatmodels。这种模式下输入......
  • linux下给硬盘分区为xfs格式
    linux下给硬盘分区为xfs格式  1、lsblk-f这个命令是查看系统可以识别出的所有分区的文件系统类型2查看fdisk-l   3、把vdb分区 Thepartitiontablehasbeenaltered表示分区表已经更改 5、lsblk查看已经分出来的区 6、mkfs.xfs-f/dev/vdb把vdb格式......
  • 内存对齐的相关问题
    文章目录一、sizeof与strlen区别二、内存对齐1、面试题--->什么是内存对齐?2、内存对齐的规则3、面试题--->为什么要使用内存对齐(提高访问内存速度)?4、如何修改内存对齐参数三、判断两个结构体是否相等一、sizeof与strlen区别sizeof是运算符,结果在编译时计算,不能返回动态分配的内......
  • Linux 中的内存(cache,buffer,)
    在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果没有则通过驱动程序直接操作磁盘。内存查看当我们使用free-h命令时,会显示如下的信息t......
  • linux swap 内存交换分区 详细介绍
    目录1、什么是SWAP,到底是干嘛的?为什么要进行内存回收?会回收的两种内存2、swappiness到底是用来调节什么的?那么这个swappiness到底起到了什么作用呢?3、kswapd什么时候会进行swap操作?4、什么是内存水位标记?(watermark)相关参数设置swap的相关操纵命令5、swap分区的优先级......
  • 记项目中的一次内存泄漏问题
    最近在使用QT开发一个大型项目,内存占用可能有点多,其中在vector.push_back()的时候报了一个segmentfault错误,感到很奇怪。因为平时遇到段错误,大多数情况下都是数组越界(使用[]访问元素),而vector的push_back()函数,在添加元素时,如果空间不足,会先向内存申请原来空间的两倍大小的新的空间......
  • COMSOL 液滴自运输模型搭建
    新建二维模型几何-先确定长度单位为mm几何-矩形-宽度设置8mm,高度2mm几何-圆-扇形角设置180deg形成联合体-全部构建  ......