内存分区模型---C++

目录

  • 内存分区模型
    • 1.1 程序运行前
    • 1.2 程序运行后
      • 1.2.1 new操作符

在这里插入图片描述

内存分区模型

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

  • 代码区:存放函数体的二进制代码,由操作系统进行管理的;
  • 全局区:存放全局变量和静态变量以及常量
  • 栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等;
  • 堆区由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收。
    意义:不同区域存放的数据,赋予不同的生命周期, 给我们更大的灵活编程。

1.1 程序运行前

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

代码区:
​ 存放 CPU 执行的机器指令。
​ 代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可;
​ 代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令。

全局区:
​ 全局变量和静态变量存放在此.
​ 全局区还包含了常量区, 字符串常量和其他常量也存放在此.
该区域的数据在程序结束后由操作系统释放.

//全局变量
int g_a = 10;
int g_b = 10;

//全局常量
const int c_g_a = 10;
const int c_g_b = 10;

int main() {

	//局部变量
	int a = 10;
	int b = 10;

	//打印地址
	cout << "局部变量a地址为: " << (int)&a << endl;
	cout << "局部变量b地址为: " << (int)&b << endl;

	cout << "全局变量g_a地址为: " << (int)&g_a << endl;
	cout << "全局变量g_b地址为: " << (int)&g_b << endl;

	//静态变量
	static int s_a = 10;
	static int s_b = 10;

	cout << "静态变量s_a地址为: " << (int)&s_a << endl;
	cout << "静态变量s_b地址为: " << (int)&s_b << endl;

	cout << "字符串常量地址为: " << (int)&"hello world" << endl;
	cout << "字符串常量地址为: " << (int)&"hello world1" << endl;

	cout << "全局常量c_g_a地址为: " << (int)&c_g_a << endl;
	cout << "全局常量c_g_b地址为: " << (int)&c_g_b << endl;

	const int c_l_a = 10;
	const int c_l_b = 10;
	cout << "局部常量c_l_a地址为: " << (int)&c_l_a << endl;
	cout << "局部常量c_l_b地址为: " << (int)&c_l_b << endl;

	system("pause");

	return 0;
}

在这里插入图片描述
可以看出:全局区包含:全局变量、静态变量、常量(字符串常量、const修饰的全局变量(全局常量));
不在全局区:局部变量、const修饰的局部变量(局部常量)。

1.2 程序运行后

栈区:
​ 由编译器自动分配释放, 存放函数的参数值,局部变量等;
​ 注意事项:不要返回局部变量的地址,栈区开辟的数据由编译器自动释放。

堆区:
​ 由程序员分配释放,若程序员不释放,程序结束时由操作系统回收;
​ 在C++中主要利用new在堆区开辟内存

示例:

1.2.1 new操作符

C++中利用new操作符在堆区开辟数据
​ 堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符 delete
​ 语法: new 数据类型
​ 利用new创建的数据,会返回该数据对应的类型的指针
示例1: 基本语法

int* func()
{
	int* a = new int(100);//在堆区开辟一块整型空间,存放10,返回值为该空间地址
	return a;
}

int main() {

	int *p = func();

	cout << *p << endl;//100
	cout << *p << endl;//100
    delete p;//释放堆区空间
	system("pause");

	return 0;
}

示例2:开辟数组

//堆区开辟数组
int main() {

	int* arr = new int[10];//开辟10个整型的堆区空间,返回首元素地址

	for (int i = 0; i < 10; i++)
	{
		arr[i] = i + 100;
	}

	for (int i = 0; i < 10; i++)
	{
		cout << arr[i] << endl;
	}
	//释放数组 delete 后加 []
	delete[] arr;//注意和一般的区别

	system("pause");

	return 0;
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务自动化.etcd跨主机集群

目录 一、容器间内部通信 二、跨主机通信 1、直接路由 2、Pipework 3、Flannel ①、Flannel特点 三、环境搭建 ETCD版本问题 ①、修改配置文件 ②、api 2 使用方法 ③、 api 3 使用方法 4、 ETCD中保存网络信息 ①、使用v2版的set命令向ETCD中保存flannel覆盖网络信…

111.连接已终止的线程、线程分离、线程取消

一、连接已终止的线程 功能&#xff1a;和一个已经终止的线程进行连接 回收子线程的资源 这个函数是阻塞函数&#xff0c;调用一次只能回收一个子线程 参数&#xff1a;thread&#xff1a;需要回收的子线程的ID retval&#xff1a; 接收子线程推出时的返回值 返回值&#xff1a…

JVM基础(2)——JVM内存模型

一、简介 JVM会加载类到内存中&#xff0c;所以 JVM 中必然会有一块内存区域来存放我们写的那些类。Java中有类对象、普通对象、本地变量、方法信息等等各种对象信息&#xff0c;所以JVM会对内存区域进行划分&#xff1a; JDK1.8及以后&#xff0c;上图中的方法区变成了Metasp…

Java使用IText生产PDF时,中文标点符号出现在行首的问题处理

Java使用IText生成PDF时&#xff0c;中文标点符号出现在行首的问题处理 使用itext 5进行html转成pdf时&#xff0c;标点符号出现在某一行的开头 但这种情况下显然不符合中文书写的规则&#xff0c;主要问题出在itext中的DefaultSplitCharacter类&#xff0c;该方法主要用来判断…

基于ChatGPT4+Python近红外光谱数据分析及机器学习与深度学习建模

2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5&#xff0c;将人工智能的发展推向了一个新的高度。2023年4月&#xff0c;更强版本的ChatGPT4.0上线&#xff0c;文本、语音、图像等多模态交互方式使其在…

C# Open Vocabulary Object Detection 部署开放域目标检测

目录 介绍 效果 模型信息 owlvit-image.onnx owlvit-post.onnx owlvit-text.onnx 项目 代码 Form1.cs OWLVIT.cs 下载 C# Open Vocabulary Object Detection 部署开放域目标检测 介绍 训练源码地址&#xff1a;https://github.com/google-research/scenic/tree/…

性格是如何形成的?能不能改变性格?

有一句话叫“性格决定命运”&#xff0c;广泛流传&#xff0c;也就是说 “命运”与“性格”是紧密相连的&#xff0c;可见“性格”对于一个人的重要性。 性格是怎么来的&#xff1f; 1、遗传基因 根据一些心理学家的最新研究&#xff0c;认为性格与人体内的基因有关系&#x…

浏览器缓存引发的odoo前端报错

前两天&#xff0c;跑了一个odoo16项目&#xff0c;莫名其妙的前端报错&#xff0c; moment.js 报的错&#xff0c; 这是一个时间库&#xff0c;不是我自己写的代码&#xff0c;我也没做过任何修改&#xff0c;搞不清楚为什么报错。以为是odoo的bug&#xff0c;所以从gitee下载…

【Python】编程练习的解密与实战(一)

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《Python | 编程解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 目录 &#x1fa90;1. 初识Python &a…

RuntimeError: CUDA error: invalid device ordinal解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

C#基础-空处理

在c#中&#xff0c;值对象是没有办法赋值为null的。比如说&#xff0c;你想要定义一个布尔值&#xff0c;你的赋值数据要么得是true、要么就得是false&#xff0c;默认情况下我们永远没可能给这个布尔赋值为null&#xff0c;即使只是对这个变量进行声明而不初始化数据&#xff…

ChatGPT会给教育界带来怎样的冲击,又将与教育碰撞出怎样的火花?

11 月 7 日凌晨&#xff0c;美国人工智能公司 OpenAI 的开发者大会正式开启&#xff0c;创始人 Sam Altman 和其同事&#xff0c;发布了团队最新的成果GPT-4 Turbo&#xff0c;新一代的GPT不仅更快、有更长的上下文、而且更好的控制。而随之推出的「GPTs」——让人们能用自然语…

服务器执行rm命令时自动记录到审计日志中

目的 当在服务器上执行类似于 rm 命令时&#xff0c;自动记录该命令执行的时间&#xff0c;在哪里执行的&#xff0c;删除的什么文件&#xff0c;记录到审计日志中&#xff0c;能够查找到某些文件丢失原因 配置 # 需要root权限&#xff0c;sudo不行&#xff0c;这里假设执行…

Java:爬虫htmlunit实践

之前我们已经讲过使用htmlunit及基础&#xff0c;没有看过的可以参考Java&#xff1a;爬虫htmlunit-CSDN博客 我们今天就来实际操作一下&#xff0c;爬取指定网站的数据 1、首先我们要爬取一个网站数据的时候我们需要对其数据获取方式我们要进行分析&#xff0c;我们今天就拿双…

注册中心(Nacos)

简介 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管…

基于DNA的密码学和隐写术综述

摘要 本文全面调研了不同的脱氧核糖核酸(DNA)-基于密码学和隐写术技术。基于DNA的密码学是一个新兴领域,利用DNA分子的大规模并行性和巨大的存储容量来编码和解码信息。近年来,由于其相对传统密码学方法的潜在优势,如高存储容量、低错误率和对环境因素的抗性,该领域引起…

网络之路28:二层链路聚合

正文共&#xff1a;1666 字 14 图&#xff0c;预估阅读时间&#xff1a;2 分钟 目录 网络之路第一章&#xff1a;Windows系统中的网络 0、序言 1、Windows系统中的网络1.1、桌面中的网卡1.2、命令行中的网卡1.3、路由表1.4、家用路由器 网络之路第二章&#xff1a;认识企业设备…

Elasticsearch windows开箱即用【记录】

一、准备工作 安装ES之前要在本机安装好JDK&#xff0c;对应的兼容性见官网链接&#xff1a;https://www.elastic.co/cn/support/matrix ES官网链接&#xff1a;https://www.elastic.co/cn/, 我本机安装的是JDK8&#xff0c;测试使用的是7.3.0版本的ES和Kibana。 1、首先去…

Spring Boot 2.6 以上整合 Swagger + Knife4j 报错

Spring Boot 2.6 以上整合 Swagger Knife4j 报错 报错信息报错原因解决办法 报错信息 org.springframework.context.ApplicationContextException: Failed to start bean documentationPluginsBootstrapper; nested exception is java.lang.NullPointerException: Cannot inv…

premiere简约大气3D动画logo片头Pr模板Mogrt免费下载

Premiere简约大气3D动画logo片头pr模板mogrt下载&#xff0c;无需插件&#xff0c;高清分辨率&#xff0c;易于自定义&#xff0c;包括教程&#xff0c;不包括音频和图像。免费下载&#xff1a;https://prmuban.com/37065.html