首页 > 系统相关 >程序的内存模型

程序的内存模型

时间:2024-11-09 16:30:15浏览次数:5  
标签:栈区 常量 模型 程序 程序员 存放 内存 全局 堆区

内存分区模型

image
C++程序在执行时,将内存大致分为4个区域
1.代码区:存放函数体的二进制代码,由操作系统进行管理。
2.全局区:存放全局变量和静态变量以及常量。
3.栈区:由编译器自动分配释放,存放函数的参数值,局部变量等。
4.堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。
代码区没有什么问题,就是存放代码的地方,而且由操作系统全权管理,和程序员没太大关系。
全局区,堆区和栈区询问的问题就比较多了,上次面试面试官就问到这些问题了(没学过,答的稀烂。。。)。
全局区,字如其名,存放全局变量和静态变量以及常量。全局变量好理解,静态变量和常量都有全局的关系,具体的联系和区别在于编译时,目前还没有了解到这些知识,先挖个坑。
栈区和堆区则经常用来对比,栈区由编译器全权负责,管理函数的形参,局部变量。(都是有自己局部生存周期,函数形参调用函数时自动分配栈区,函数返回后销毁,局部变量同理)。堆区则由程序员自己管理的区域,防止程序员最后忘记回收,若最后有剩余的操作系统会进行回收操作。
image
四个区存在的意义,方便对不同生命周期的数据进行专门管理,给予了编程的灵活性。
image

1.1程序运行前

在程序编译后,生成一个exe可执行程序,未执行该程序前分为两个区域。
为什么只有两个,因为没有运行,堆区和栈区都是根据指令(调用函数,局部定义和程序员自己申请堆区空间)来实时申请和释放的,编译后并没有这些分区。代码区不必多说,全局区则由于编译时扫描了一遍源程序所以已经能够分辨全局变量,静态变量和常量了。

代码区

存放CPU的机器指令。
代码区是共享且只读的,目的是对于频繁执行的程序,只需要在内存中存在一份即可,只读是防止程序在运行时修改自身。
image

全局区

全局区存放的变量有全局变量、静态变量和常量(字符串常量和全局常量)。

栈区

存放函数的参数以及局部变量,编译器管理和回收。切勿返回局部变量的地址,因为那块地址已经释放,已经没有权限了。

堆区

由程序员自己管理的区域,程序结束时,操作系统强制回收内存。
可以使用new和delete进行操作。用法如下:

new 数据类型(初值)  //整个语句返回开辟的地址
delete 数据类型

举个例子

int* p = new int(10);
delete p;

数组比较特殊:

int* p = new int[10];
delepe[] p;

标签:栈区,常量,模型,程序,程序员,存放,内存,全局,堆区
From: https://www.cnblogs.com/gcfer/p/18536107

相关文章

  • 内存管理-41-highatomic预留内存
    基于msm-5.4一、相关结构体1.structzonestructzone{unsignedlongnr_reserved_highatomic;...};成员介绍:nr_reserved_highatomic:记录为高优先级原子分配预留的内存页面数量。二、赋值逻辑赋值路径只有两个,一个是对高阶原子分配进行页面预留,另一个是减......
  • 网络IO模型
    5个IO模型阻塞IO,异步IO,信号驱动IO,多路复用IO,异步IO一个IO操作的组成(1)发起IO请求(2)执行具体的IO操作同步和异步的区别第二步是否阻塞。如果发起IO请求后进程阻塞直到IO完成,就是同步IO;反之,如果进程发起IO请求后可以去执行其它事,等IO完了再处理,就是异步IO。阻塞IO和非阻塞IO的区......
  • python+flask计算机毕业设计个人碳足迹系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于碳足迹的研究,现有研究多集中在宏观层面的碳排放总量分析以及企业层面的碳足迹管理等方面。例如,许多研究聚焦于国家或大型企业的碳......
  • python+flask计算机毕业设计好骑行打卡园app系统(程序+开题+论文)
    文件加密系统的设计与实现tp835本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容好骑行打卡园app系统毕业设计相关内容说明一、选题背景随着骑行运动在全球范围内的日益流行,与之相关的数字化服务......
  • 【51单片机】程序实验1——点亮LED
    由于博主还未学习数字电路和计算机组成原理,因此本系列先开展单片机软件编程的内容,硬件结构的内容简单带过,会考虑安排在后续学习计划中,编程入门部分不会深入涉及单片机电路结构原理。博主已有C语言基础,因此相关内容不会从零开始赘述主要参考学习资料:B站【普中官方】51单片......
  • 将URDF模型文件导入Issac_Gym系列【1】
    1在solidworks中导出URDF文件1这里按照古月居老师的要求进行基本的配置https://www.bilibili.com/video/BV1Tx411o7rH/?vd_source=fcddcf87e97b17fd530dc88db643aab3关于catkin_ws这种ROS的工作环境的配置,具体可以参考我的这篇博客https://www.cnblogs.com/myleaf/p/1846629......
  • vue通过ollama接口调用开源模型
    先展示下最终效果: 第一步:先安装ollama,并配置对应的开源大模型。安装步骤可以查看上一篇博客:ollama搭建本地ai大模型并应用调用 第二步:需要注意两个配置,页面才可以调用1)OLLAMA_HOST="0.0.0.0:11434"2)若应用部署服务器后想调用,需要配置:OLLAMA_ORIGINS=* 第三步:js流式调......
  • Redis的线程模型
    Redis的单线程模型详解        Redis的“单线程”模型主要指的是其主线程,这个主线程负责从客户端接收请求、解析命令、处理数据和返回响应。为了深入了解Redis单线程的具体工作流程,我们可以将其分为以下几个步骤:接收客户端请求Redis的主线程会通过网络接口接......
  • springboot毕设 篮球网站 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展和互联网的广泛普及,体育爱好者获取篮球赛事信息的途径日益多样化。篮球作为世界上最受欢迎的运动之一,拥有庞大的粉丝群体。然......
  • springboot毕设 拉萨旅游自助民宿平台 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,拉萨作为西藏自治区的首府,以其独特的自然风光、深厚的文化底蕴和神秘的宗教氛围,吸引了越来越多的国内外游客。然而,传统的酒店住......