内存四区(代码区 静态区 栈区 堆区)

参考:内存四区(代码区 静态区 栈区 堆区)
作者:今天天气眞好
发布时间: 2021-04-01 18:09:13
网址:https://blog.csdn.net/qq_51118175/article/details/115379779?spm=1001.2014.3001.5501

内存相关博文:
1、内存四区(代码区 静态区 栈区 堆区)
2、程序运行时对应的内存分布(BSS段、数据段、代码段、堆、栈)关系
3、深入理解STM32内存管理

目录

  • 1.代码区
  • 2.全局区
  • 3.栈区
  • 4.堆区

在这里插入图片描述

面试基本必问题目:内存分区

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

内存四区意义:不同区域存放的数据,赋予不同的生命周期,给我们提供很大的灵活编程

下面可以分为两大类

1.程序运行前:在程序编译后,生成了exe可执行程序,未执行该程序前可分为两个区域
(1)代码区
(2)全局区

2.程序运行后
(1)栈区
(2)堆区

下面进行详细介绍

1.代码区

1.代码区存放CPU执行的机器指令。比如我们写的程序会转为0 1这种数据后再保存在代码区
2.代码区是共享的,共享的目的是对于频繁执行的程序,只需要在内存中有一份代码即可。
3.代码区是只读的,使其只读的原因是防止程序意外的修改了他的指令

2.全局区

1.全局变量静态变量存放在此
2.全局区还包含了常量区,字符串常量和其他常量(const修饰的变量,也叫全局常量)存放在此
3.该区域的数据在程序结束后由操作系统释放

示例代码:

#include <iostream>
using namespace std;//全局变量 
int g_a = 10;
int g_b = 10; //const修饰的全局变量 
const int c_g_a = 10;
const int c_g_b = 10;int main()
{//局部变量 int a = 10;int b = 10;cout << "局部变量a的地址为: " << &a << endl;cout << "局部变量b的地址为: " << &b << endl;//字符串常量cout << "字符串常量的地址为:" << &("hello world") << endl;//全局变量 cout << "全局变量g_a的地址为: " << &g_a << endl;cout << "全局变量g_b的地址为: " << &g_b << endl;//静态变量  在普通的变量前面加static,属于静态变量static int s_a = 10;static int s_b = 10;cout << "静态变量s_a的地址为: " << &s_a << endl;cout << "静态变量s_b的地址为: " << &s_b << endl;//const修饰的变量//1.const修饰的全局变量 cout << "const修饰全局变量c_g_a的地址为: " << &c_g_a << endl;cout << "const修饰全局变量c_g_b的地址为: " << &c_g_b << endl;	//2.const修饰的局部变量 const int c_l_a = 10;const int c_l_b = 10;cout << "const修饰局部变量c_l_a的地址为: " << &c_l_a << endl;cout << "const修饰局部变量c_l_b的地址为: " << &c_l_b << endl;return 0;
}

运行结果:
在这里插入图片描述
同样也验证了全局区存放全局变量,静态变量,字符串常量和const修饰的局部变量

3.栈区

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

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

示例代码:

#include <iostream>
using namespace std;int *fun()
{int a = 10;return &a;
}int main()
{int *p = fun();cout << *p << endl;cout << *p << endl;cout << *p << endl;return 0;
}

运行结果:
在这里插入图片描述
注意到:第一次可以打印正确的数字是因为编译器给我们做了一次保留,怕是误操作。但是第二次数据就不会保存,自动释放了。

4.堆区

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

在C语言中使用malloc来进行分配
在c++中使用关键字new来开辟空间

示例代码:

#include <iostream>
using namespace std;int *fun()
{int *p  =  new int(10) ;return p;
}int main()
{int *a = fun();cout << *a << endl;cout << *a << endl;cout << *a << endl;return 0;} 

运行结果:
在这里插入图片描述
注意该程序只是测试程序,还要进行释放,使用关键字delete
语句:delete p;

结尾附上一道面试题:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

webpack4 入门配置研究

1. 全局安装 npm install webpack webpack-cli webpack-dev-server -g 1.1&#xff09;输密文的密码&#xff08;电脑开机&#xff09; 1.2&#xff09;安装成功 2. 输入命令mkdir config dist src创建三个文件夹 3.输入命令npm init -y 4. 输入命令touch dist/index.html src/…

王者荣耀6月23服务器维护,王者荣耀6.23维护到什么时候?6月23日长枪掠火版本异常介绍...

王者荣耀6.23维护到什么时候&#xff1f;可能很多玩家对于今天更新的时间还不太清楚&#xff0c;下面就让浏览器小编为大家带来&#xff0c;王者荣耀6月23日长枪掠火版本异常介绍。亲爱的召唤师&#xff1a; “长枪掠火”版本更新后&#xff0c;我们收到反馈&#xff0c;本次在…

采样频率和带宽的关系_基于矢量网络分析仪的 TDR 与传统采样示波器 TDR 之间的测量性能和优势比较...

最近几年随着多 Gbps 传输的普及&#xff0c;数字通信标准的比特率也在迅速提升。比特率的提高使得在传统数字系统中不曾见过的问题显现了出来。诸如反射和损耗的问题会造成数字信号失真&#xff0c;导致出现误码。另外由于保证器件正确工作的可接受时间裕量不断减少&#xff0…

mysql的分片系统_MySQL分片

shardingMySQL5以后提供了Sharding的能力&#xff0c;其目的就是为突破单节点数据服务器I/O能力限制&#xff0c;解决数据库Scale Out水平扩展的问题。通过Sharding可以将数据按照物理位置贴合用户分布&#xff0c;得到更加快速的响应&#xff1b;操作庞然大物总是让人头疼&…

在线普通话转粤语发音_香港最新悬疑侦探剧福尔摩师奶,粤语知识好难

150元系统学粤语付费咨询微信2019年2月25日香港TVB上了一部新剧《福尔摩师奶》&#xff0c;该剧以19世纪末至20世纪初的油麻地为背景&#xff0c;讲述一个女探长祖迪费查(陈松伶饰)破案的故事。/ 盏鬼 // 识少少 /①普通话的“嫉妒、受不了”&#xff0c;粤语会说&#xff1a;唔…

Java web小项目_个人主页(1)—— 云环境搭建与项目部署

摘自&#xff1a;Java web小项目_个人主页&#xff08;1&#xff09;—— 云环境搭建与项目部署 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-26 23:59:39 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/115104493?spm1001.2014.3001…

网页搜索怎么显示排名_深圳seo搜索排名优化效果怎么样

效果怎么样l31b10seo搜索排名优化深圳&#xff0c;企业商家为了自己的网站有更好的排名&#xff0c;获得更好的流量&#xff0c;往往会采用SEO优化&#xff0c;那么SEO优化有哪些方法呢&#xff1f;或者是哪些方法更有效呢&#xff1f;这是一个多媒体的时代&#xff0c;内容元素…

实战 Lucene,第 1 部分: 初识 Lucene

Lucene 简介 Lucene 是一个基于 Java 的全文信息检索工具包&#xff0c;它不是一个完整的搜索应用程序&#xff0c;而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索工具包。 目前已经有很…

Java web小项目_个人主页(2)—— 边缘加速原理与实现

摘自&#xff1a;Java web小项目_个人主页&#xff08;2&#xff09;—— 边缘加速原理与实现 作者&#xff1a;丶PURSUING 发布时间&#xff1a; 2021-03-27 14:44:40 网址&#xff1a;https://blog.csdn.net/weixin_44742824/article/details/115260283?spm1001.2014.3001.5…

mysql 双从性能_MySQL双主一致性架构优化

转自&#xff1a;MySQL双主一致性架构优化 - osc_avwazwuz的个人空间 - OSCHINA​my.oschina.net一、双主保证高可用MySQL数据库集群常使用一主多从&#xff0c;主从同步&#xff0c;读写分离的方式来扩充数据库的读性能&#xff0c;保证读库的高可用&#xff0c;但此时写库仍然…

最清晰细致的教程!一步步教你打造Win7+CentOS双系统

大概半年前自学了一段时间Linux&#xff0c;但没有坚持下来……最近又想开始看&#xff0c;但是希望看到Linux在物理机下的运行情况而不是仅仅在虚拟机下运行&#xff0c;所以尝试着在已经安装了Win7的系统下安装CentOS&#xff0c;实现双系统切换使用的目的。经过大半天的实验…

全国计算机等级考试题库二级C操作题100套(第01套)

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

linux系统日志_如何使用 Linux Cockpit 来管理系统性能 | Linux 中国

Linux Cockpit 是一个基于 Web 界面的应用&#xff0c;它提供了对系统的图形化管理。看下它能够控制哪些。-- Sandra Henry-stocker如果你还没有尝试过相对较新的 Linux Cockpit&#xff0c;你可能会对它所能做的一切感到惊讶。它是一个用户友好的基于 web 的控制台&#xff0c…

使用randomaccessfile类将一个文本文件中的内容逆序输出_Java IO2:RandomAccessFile

RandomAccessFileRandomAccessFile类可以说是Java语言中功能最为丰富的文件访问类&#xff0c;它提供了众多的文件访问方法。RandomAccessFile类支持"随机访问"方式&#xff0c;可以跳转到文件的任意位置处读写数据。要访问一个文件的时候&#xff0c;不想把文件从头…

JavaScript可否多线程? 深入理解JavaScript定时机制

JavaScript的setTimeout与setInterval是两个很容易欺骗别人感情的方法,因为我们开始常常以为调用了就会按既定的方式执行, 我想不少人都深有同感, 例如 setTimeout( function(){ alert(’你好!’); } , 0); setInterval( callbackFunction , 100); 认为setTimeout中的问候方法…

全国计算机等级考试题库二级C操作题100套(第02套)

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

2007cad多个文件窗口上部排列_【中考信息技术总复习讲义】模块三 操作系统与文件管理...

模块三 操作系统与文件管理学习目标&#xff11;&#xff0e;了解操作系统的概念、功能和分类&#xff0c;了解操作系统的发展。&#xff12;&#xff0e;熟练掌握Windows桌面、窗口、菜单、对话框的组成及常用操作。&#xff13;&#xff0e;掌握创建桌面快捷方式的方法和控制…

浅谈session,cookie,sessionStorage,localStorage的区别及应用场景

浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式&#xff0c;可以利用cookie,session等跟服务端进行数据交互。 一、cookie和session cookie和session都是用来跟踪浏览器用户身份的会话方式。 区别&#xff1a; 1、保持状态&#xff1a;cookie保存在浏览器端&#x…

iphone照片删掉又出现_iPhone手机相册无法加锁应该怎么办?

想必大家都是iPhone手机的忠实粉丝了跟安卓机子不同的是&#xff0c;iPhone手机是无法给相册加锁的这可困扰了我&#xff01;毕竟手机里的相片太多&#xff0c;不想给别人翻到在网上查找了许多的方法&#xff0c;有人说给应用限额&#xff0c;当时以为找到了救星立马给相册设置…

使用GDAL工具对卫星数据进行影像配准

一、 简介本文将探讨使用GDAL来对卫星影像进行影像配准&#xff0c;依然以Orb-View3数据为例&#xff08;选择北京市中心附近的影像为例&#xff09;。其实按照文章中的方法&#xff0c;对任何影像都可以进行配准&#xff0c;不仅仅局限于卫星影像&#xff0c;只要能够提…