C++内存分区模型

c++程序在执行时会将内存划分为四个区域,分别是代码区,全局区,栈区和堆区。

划分的意义:

方便管理资源

通过划分成不同区域,可以更高效地分配和释放内存。栈上的内存分配和释放是自动进行,而堆上的内存分配和释放需要显示进行,使开发者能够灵活控制内存的使用。

支持函数调用

栈的存在使得函数调用成为可能,每当调用一个函数时,会在栈上为函数分配一块内存空间,用于保存函数的参数,局部变量和其他相关信息。函数调用完成后,栈被销毁,函数返回到调用点,栈的管理方式使得函数调用可以高效进行。

确保变量生命周期

不同的内存区域有不同的生命周期,局部变量和栈上的内存在函数调用结束后会自动释放;全局变量和静态变量在整个程序的生命周期内存在,可以在不同的函数之间共享数据。

代码区

存放函数体的二进制代码,最重要的特点是只读共享

只读性

代码通常被标记成只读,意味着其存储的指令是不可修改的,也是为了防止程序意外修改自身指令。

共享性

代码区是可执行程序的共享部分,多个相同的程序实例在内存中同时运行时,可以共享同一份代码区,这样可以节省内存空间,并提高系统性能

分页和内存保护:

代码区通常是基于分页机制的,操作系统将代码区的内存划分为固定大小的页面,并使用页表进行地址映射,这样可以实现地址保护,防止程序越界访问和非法修改代码区。

全局区

存放全局变量静态变量以及常量 (注意,const修饰的局部变量也不在全局区中)

全局变量定义在函数体外部,生命周期贯穿整个程序

静态变量 由static关键字修饰的变量

常量 有字符串常量等,以及const修饰的全局变量(全局常量)

栈区

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

注意事项,不要返回局部变量的地址

堆区

由开发者分配和释放,若不释放,程序结束时由操作系统回收

利用new关键字可以将数据开辟到堆区

eg:

int* func(){int* p = new int(10); //p是一个指针,局部变量,函数运行完销毁,里面保存的是堆中数据10的地址return p;
}
int main(){int *p = func(); //这个地址用main函数中的一个实参接收了,后面输出的也都是这个实参pcout << *p << endl; // 10//删除的话要用deletedelete p;//若是定义数组空间到堆区,删除的时候也要加一个[]int* arr = new int[10];delete[] arr;
}

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

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

相关文章

盘点2024年最新可用免费云服务器

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人开始使用云服务器来满足各种业务需求。云服务器作为云计算的核心服务之一&#xff0c;以其弹性扩展、按需付费等特点受到广泛关注。本文将为大家盘点2024年最新可用免费云服务器&#xff0c;助力大家轻松上云&#xf…

mysql的下载、安装

首先进入官网&#xff1a;MySQL 点击“downloads”进入下载界面 2.往下滑动滚轮&#xff0c;点击“mysql community...&#xff08;公开版&#xff09;” 3.往下滑&#xff0c;找到并单击“install for Windows” 4.选择版本&#xff1a;初学者可以使用较低版本&#xff0c;较…

软件架构静态演化

1.静态演化需求 软件架构静态演化的需求是广泛存在的&#xff0c;可以归结为两个方面。 &#xff08;1&#xff09;设计时演化需求。在架构开发和实现过程中对原有架构进行调整&#xff0c;保证软件实现与架构的一致性以及软件开发过程的顺利进行。 &#xff08;2&#xff09;运…

20240409在全志H3平台的Nano Pi NEO CORE开发板上运行Ubuntu Core16.04时跑通4G模块EC200A-CN【PPP模式】

20240409在全志H3平台的Nano Pi NEO CORE开发板上运行Ubuntu Core16.04时跑通4G模块EC200A-CN【PPP模式】 2024/4/9 14:25 【不建议使用ppp模式&#xff0c;功耗大&#xff0c;貌似更过分的&#xff01;网速还低&#xff01;】 【唯一的优点&#xff1a;ppp模式下是通过脚本配置…

什么是WAAP,对网络安全可以起到哪些帮助

自从只能在本地设备上安装并运行应用程序的时代以来&#xff0c;我们在技术方面取得了长足的进步。随着云计算的兴起、网络的普及和带宽的提高&#xff0c;现代Web应用程序的访问变得像在浏览器中输入网址一样简单。 这意味着企业可以更方便地部署用于为客户提供服务的应用程序…

Excel文件解析

在此模块的学习中&#xff0c;我们需要一个新的开源类库---Apahche POI开源类库。这个类库的用途是&#xff1a;解析并生成Excel文件(Word、ppt)。Apahche POI基于DOM方式进行解析&#xff0c;将文件直接加载到内存&#xff0c;所以速度比较快&#xff0c;适合Excel文件数据量不…

【Qt 学习笔记】Qt常用控件 | 按钮类控件Radio Button的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件Radio Button的使用及说明 文章编号&#xff…

每日一题---OJ题: 有效的括号

片头 嗨! 小伙伴们,大家好! 我们又见面啦! 今天我们来一起尝试一下这道题目---有效的括号,准备好了吗? 我们开始咯! 说实话,我刚开始做这道题的时候也是一脸懵,怎么进行括号匹配呢? 别慌,我们一起画个图,分析分析括号匹配的过程~ 如下图所示,上方表示一个字符串数组,存放不…

深入剖析Tomcat(二) 实现一个简单的Servlet容器

现在开始《深入剖析Tomcat》第二章的内容&#xff0c;第一章中&#xff0c;我们编码实现了一个能正常接收HTTP请求并返回静态资源的Web容器&#xff0c;这一章开始引入Servlet的概念&#xff0c;使我们的服务能根据请求动态返回内容。 Servlet是什么&#xff1f; 这是首先要弄…

【系统架构师】-未来信息综合技术

1、信息物理系统技术 CPS是控制系统、嵌入式系统的扩展与延伸&#xff0c;集成感知、计算、通信、控制、和自动控制技术。 构件信息空间中的人、机、物、环境、信息等相互映射、适时交互、高效协同。 体系结构&#xff1a; 1&#xff09;单元级&#xff1a;不可分割的CPS最…

腾讯EdgeOne产品测评体验——开启安全防护,保障数据无忧

当今时代数字化经济蓬勃发展人们的生活逐渐便利&#xff0c;类似线上购物、线上娱乐、线上会议等数字化的服务如雨后春笋般在全国遍地生长&#xff0c;在人们享受这些服务的同时也面临着各式各样的挑战&#xff0c;如网络数据会不稳定、个人隐私容易暴露、资产信息会被攻击等。…

SSRF非常规利用方法

前言 SSRF漏洞在互联网公司中应该是除了越权之外最普遍的漏洞了。关于漏洞的原理&#xff0c;绕过&#xff0c;传统的扫端口、各种探测等利用方式等就不再赘述&#xff0c;这里分享下自己作为攻防当中常用的一些SSRF的利用途径。 0x01 Cloud Metadata 就是各种云上的元数据信…

单链表链表专题

1 链表的概念 概念&#xff1a;链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 链表的结构跟⽕⻋⻋厢相似&#xff0c;淡季时⻋次的⻋厢会相应减少&#xff0c;旺季时⻋次的⻋厢会额外增加⼏节。只 需要…

MySQL表结构的操作

文章目录 1. 创建表2. 查看表3. 修改表4. 删除表 1. 创建表 create table table_name (field1 datatype,field2 datatype,field3 datatype )character set 字符集 collate 校验集 engine 存储引擎;field&#xff1a;列名datatype&#xff1a;列的类型character set&#xff1a…

VueUse工具库 常用api

简介&#xff1a; VueUse不是Vue.use&#xff0c; VueUse 为 Vue 2和Vue3 服务的一套Vue Composition API的常用工具集&#xff0c;&#xff0c;它提供了一系列的 hooks 和工具函数&#xff0c;帮助我们更方便地使用 Vue Composition API。 通俗的来说&#xff0c;这就是一个工…

zookeeper分布式应用程序协调服务+消息中间件kafka分布式数据处理平台

一、zookeeper基本介绍 1.1 zookeeper的概念 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能包括&#xff1a;配置维护、域名服务、…

滑动窗口题解2

目录 1 找到字符串中所有字母异位词 分析&#xff1a; 代码展示&#xff1a; 代码展示&#xff1a; 2 串联所有单词的子串 分析&#xff1a; 代码展示&#xff1a; 3 串联所有单词的子串 分析&#xff1a; 代码展示&#xff1a; 4 水果成篮 分析&#xff1a; 代码展…

JDK自带的线程池有哪些?

Java JDK 自带的线程池主要包含以下几种类型&#xff0c;这些线程池都是通过 java.util.concurrent 包中的 Executors 工具类提供的工厂方法创建&#xff1a; 固定大小线程池 (Fixed Thread Pool)&#xff1a; newFixedThreadPool(int nThreads)&#xff1a;创建一个定长线程池…

障碍物识别技术赋能盲人独立出行:一场静默的科技革新

作为一名资深记者&#xff0c;我始终关注并报道那些科技如何助力特殊群体克服生活挑战的动人故事。近期&#xff0c;一款叫做蝙蝠避障的应用进入了我的视线&#xff0c;它搭载先进障碍物识别技术以其独特的优势&#xff0c;悄然为视障人士的独立出行带来了显著变革。 “障碍物识…