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

参考:内存四区(代码区 静态区 栈区 堆区)
作者:今天天气眞好
发布时间: 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;本次在…

mysql ignore详解_MySQL replicate-ignore-db详解

1&#xff1a;官方的解释是&#xff1a;在主从同步的环境中&#xff0c;replicate-ignore-db用来设置不需要同步的库。解释的太简单了&#xff0c;但是里面还有很多坑呢。生产库上不建议设置过滤规则。如果非要设置&#xff0c;那就用Replicate_Wild_Ignore_Table: mysql.%吧。…

【转】_declspec(naked) 使用

// 将本文完整拷贝, 然后在VC6 下建立控制台程序, 可直接运行~ 看到结果后再来阅读此文 // 文章出处甚多, 已不能列出所有连接 #include "stdafx.h"#include <stdio.h> /* >>>>>> _declspec(naked) 使用 <<<<<<<…

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

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

【模板】并查集

只是再自己打一遍熟悉一些 #include<iostream> #include<cstdio> using namespace std; #define tcl(a,b,c) for(ab;a<c;a) int f[100001]; int get(int x) {if(f[x]x)return x;else {f[x]get(f[x]);return f[x];} } void join(int a,int b) {int t1,t2;t1get(a…

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;内容元素…

String.slice

String.slice(start, end)start从字符串的哪个index开始截取 默认值0 如果为负值&#xff0c;则从字符串的尾部向前倒推indexend到从字符串的哪个index结束截取 默认值string.length 有效值 Math.abs(string.length)>end 如果为负值&#xff0c;则从字符串的尾部向前倒推ind…

mysql5.5怎么删除字段_Linux 上 Mysql5.5 只能新建表中的字段不能删除表,权限root...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼mysql> describe wef_wall_content;------------------------------------------------------------------------| Field | Type | Null | Key | Default | Extra |----------------------------------------------------------…

实战 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…

range函数python-Python for循环与range函数的使用详解

for 循环 For … in 语句是另一种循环语句&#xff0c;其特点是会在一系列对象上进行迭代&#xff08;Iterates&#xff09;&#xff0c;即它会遍历序列中的每一个项目 注意&#xff1a; 1、else 部分是可选的。当循环中包含它时&#xff0c;它循环中包含它时&#xff0c;它总会…

Ajax同步和异步的区别?

今天在code review时候看到同事的代码&#xff0c;用了ajax同步&#xff0c;async:false,如果不设置async参数&#xff0c;默认是true&#xff0c;为异步&#xff0c;异步的情况是比较复杂的&#xff0c;看下同步这个例子&#xff1a; function getCommit(){ var data null;…

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…