Day 9 C++ 内存分区模型
目录
内存四区
代码区
全局区
栈区
堆区
内存四区意义:
程序运行前后内存变化
程序运行前
代码区
全局区
程序运行后
栈区
堆区
new操作符
基本语法
创建
释放(delete)
内存四区
代码区
代码区(Code Segment):存放程序的机器指令,包括函数体的二进制代码。这部分内存由操作系统进行管理,是只读的,不允许修改。
全局区
全局区(Global/Data Segment):存放全局变量、(static)静态变量以及(const)常量数据。全局变量和静态变量在程序运行期间始终存在,而常量数据则通常存储常量字符串等不可修改的数据。这部分内存在程序启动时分配,在程序结束时释放。
栈区
栈区(Stack):用于存储函数的参数值、局部变量以及函数调用时的上下文信息,由编译器自动分配和释放,具有后进先出(LIFO)的特点。在函数调用时,会为每个函数帧(函数调用的上下文)分配一段栈空间,函数返回后会自动释放该空间。
堆区
堆区(Heap):用于动态分配内存,程序员可以通过手动管理来申请和释放堆内存。堆区的内存分配和释放不受函数调用的限制,需要程序员显式地使用
new和delete、malloc和free等操作符来进行内存的分配和释放,若程序员不释放,程序结束时由操作系统回收。堆区的内存空间是不连续的,大小相对较大。
内存四区意义:
不同区域存放的数据,被赋予了不同的生命周期, 让我们可以更灵活地编程
(帮助我们合理管理内存资源,提高程序的性能和可维护性)
程序运行前后内存变化
程序运行前
在程序编译后,生成了exe可执行程序,未执行该程序前分为全局区和代码区两个区域
代码区
存放 CPU 执行的机器指令
代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可
代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令
全局区
全局变量和静态变量存放在此.(全局变量、static 静态变量)
全局区还包含了常量区, 字符串常量和其他常量也存放在此. (const 常量等)
该区域的数据在程序结束后由操作系统释放
程序运行后
多了堆区和栈区,栈和堆是在程序运行时动态创建的。在程序运行时,根据需要会动态地为局部变量、函数调用等分配栈空间,而堆则用于动态分配内存。
栈区
栈区是由编译器自动分配和释放的,用于存储函数的参数值、局部变量等数据。栈的分配和释放遵循后进先出的原则(LIFO)。当程序执行到一个函数时,该函数的参数会被压入栈中,并在函数执行完毕后自动释放。同样,函数内部的局部变量也会在函数执行完毕后被自动销毁。
注意:在栈区分配的数据不应返回其地址,因为一旦函数执行结束,栈上的数据将被清除,这意味着返回局部变量的地址可能会导致访问已经释放的内存,引发未定义的行为。为了避免这种情况,应始终返回指向堆上动态分配的内存的地址,或是返回全局变量的地址。
堆区
堆区是由程序员手动分配和释放的,需要注意的是如果程序员没有及时释放堆区的内存,那么在程序结束时,操作系统会回收这些内存。
一般使用
new关键字来在堆区动态地分配内存,通过new分配的内存将在堆区中创建,并返回该内存的地址。我们可以使用指针来保存这个地址,并在适当的时候使用delete关键字释放对应的内存。需要注意的是,在使用堆区的内存时,要确保正确分配和释放内存,否则可能会导致内存泄漏或者因释放已释放内存而产生悬空指针。
new操作符
new 是C++中用于动态分配内存的操作符。它可以用来在堆区(也称为自由存储区)上创建对象或数组。(程序员手动开辟,手动或者程序结束时自动释放,释放内存利用操作符 delete)
基本语法
new 数据类型
利用new创建的数据,会返回该数据对应的类型的指针
创建
//动态创建单个对象:Type* pointer = new Type;//Type* pointer = new Type(a);//动态创建数组:Type* array = new Type[size]{a,b,c};//Type* array = new Type[size];
释放(delete)
//释放对象delete pointer;//释放数组delete[] array;
相关文章:
Day 9 C++ 内存分区模型
目录 内存四区 代码区 全局区 栈区 堆区 内存四区意义: 程序运行前后内存变化 程序运行前 代码区 全局区 程序运行后 栈区 堆区 new操作符 基本语法 创建 释放(delete) 内存四区 代码区 代码区(Code Segment&…...
STM32 CubeMX 定时器(普通模式和PWM模式)
STM32 CubeMX STM32 CubeMX 定时器(普通模式和PWM模式) STM32 CubeMXSTM32 CubeMX 普通模式一、STM32 CubeMX 设置二、代码部分STM32 CubeMX PWM模式一、STM32 CubeMX 设置二、代码部分总结 STM32 CubeMX 普通模式 一、STM32 CubeMX 设置 二、代码部分 …...
mysql清除主从复制关系
mysql清除主从复制关系 mysql主从复制中,需要将主从复制关系清除,需要取消其从库角色。这可通过执行RESET SLAVE ALL清除从库的同步复制信息、包括连接信息和二进制文件名、位置。从库上执行这个命令后,使用show slave status将不会有输出。reset slave是各版本Mysql都有的功…...
Spring Cloud Eureka 服务注册和服务发现超详细(附加--源码实现案例--及实现逻辑图)
文章目录 EurekaEureka组件可以实现哪些功能什么是CAP原则?服务注册代码实战搭建注册中心服务A搭建服务B搭建启动服务启动注册中心启动服务A启动服务B 结束语 Eureka 这篇文章先讲述一下Eureka的应用场景、代码实现案例,多个服务模块注册到Euraka中&…...
【docker】docker部署nginx
目录 一、步骤二、示例 一、步骤 1.搜索nginx镜像 2.拉取nginx镜像 3.创建容器 4.测试nginx 二、示例 1.搜索nginx镜像 docker search nginx2.拉取nginx镜像 docker pull nginx3.创建容器,设置端口映射、目录映射 # 在root目录下创建nginx目录用于存储nginx数据…...
苍穹外卖-day08
苍穹外卖-day08 本项目学自黑马程序员的《苍穹外卖》项目,是瑞吉外卖的Plus版本 功能更多,更加丰富。 结合资料,和自己对学习过程中的一些看法和问题解决情况上传课件笔记 视频:https://www.bilibili.com/video/BV1TP411v7v6/?sp…...
【matlab】机器人工具箱快速上手-动力学仿真(代码直接复制可用)
动力学代码,按需修改参数 各关节力矩-关节变量的关系曲线: %%%%%%%%SCARA机器人仿真模型 l[0.457 0.325]; L(1) Link(d,0,a,l(1),alpha,0,standard,qlim,[-130 130]*pi/180);%连杆1 L(2)Link(d,0,a,l(2),alpha,pi,standard,qlim,[-145 145]*pi/180);%连…...
MySQL高级篇第2章(MySQL的数据目录)
文章目录 1、MySQL8的主要目录结构1.1 数据库文件的存放路径1.2 相关命令目录1.3 配置文件目录 2、数据库和文件系统的关系2.1 查看默认数据库2.2 数据库在文件系统中的表示2.3 表在文件系统中的表示2.3.1 InnoDB存储引擎模式2.3.2 MyISAM存储引擎模式 2.4 小结 1、MySQL8的主要…...
【通过改变压缩视频的分辨率实现高效的视频语义分割】CVPR2022论文精度
Efficient Semantic Segmentation by Altering Resolutions for Compressed Videos Efficient Semantic Segmentation by Altering Resolutions for Compressed VideosBasic Information:论文简要 :背景信息:a. 理论背景:b. 技术路线: 结果:a. 详细的实验设置:b. 详细的实验结果…...
golang 时间工具类
用不习惯也嫌麻烦每次都去操作时间,然后就自己写了个时间工具类 package timeutilimport ("time" )func New() *TimeUtil {return &TimeUtil{} }// TimeUtil 是时间操作工具类 type TimeUtil struct{}// GetFormattedDate 获取格式化的日期字符串 fun…...
剑指 Offer 44.!! 数字序列中某一位的数字
参考资料 剑指 Offer 44. 数字序列中某一位的数字 中等 351 相关企业 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。…...
16K个大语言模型的进化树;81个在线可玩的AI游戏;AI提示工程的终极指南;音频Transformers课程 | ShowMeAI日报
👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 LLM 进化树升级版!清晰展示 15821 个大语言模型的关系 这张进化图来自于论文 「On the Origin of LLMs: An Evolutionary …...
Docker Compose 容器编排 + Docker--harbor私有仓库部署与管理
目录 一、Docker Compose简介 1、Docker Compose 的YAML 文件格式及编写注意事项 2、Docker compose 使用的三个步骤 3、 Docker Compose配置常用字段 4、 Docker Compose 常用命令 5、 Docker Compose 文件结构 二: Docker Compose 安装 1、Docker Compose…...
九五从零开始的运维之路(其二十六)
文章目录 前言一、概述1.什么是数据库2.数据库能干什么(一)企业应用(二)金融行业(三)电子商务(四)社交媒体(五)物联网 3.为什么要用数据库,优势、…...
29.Git版本控制工具
1.Git简介 Git是一开源的分布式版本控制系统,提供了存储代码、管理版本历史、分支和合并等功能。 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。它的主要目的是跟踪和记录软件开发过程…...
【算法题】2790. 长度递增组的最大数目
题目: 给你一个下标从 0 开始、长度为 n 的数组 usageLimits 。 你的任务是使用从 0 到 n - 1 的数字创建若干组,并确保每个数字 i 在 所有组 中使用的次数总共不超过 usageLimits[i] 次。此外,还必须满足以下条件: 每个组必须…...
Qt设置开机自启动无法读取配置文件
问题: Qt5.9.4再注册表中加入开机自启动后,每次开机可以启动,但是无法读取配置文件 解决方案 再main()方法中加入QDir::setCurrent(QCoreApplication::applicationDirPath());即可。 static void AutoRunWithSystem(bool bAutoRun) {// 获取…...
解决Font family [‘sans-serif’] not found问题
序言 以下测试环境都是在 anaconda3 虚拟环境下执行。 激活虚拟环境 conda activate test_python_env 或 source activate test_python_env工具: WinSCP Visual Studio Code 这里笔者使用 WinSCP 工具连接,编辑工具是 Visual Studio Code 一、字体…...
C语言进阶-2
1、多文件C语言项目 1.1、简单的C语言程序(项目) 只有一个C文件(a.c),编译的时候gcc a.c -o a,执行的时候./a 1.2、复杂的C语言程序(项目) 是由多个C文件构成的。例如一个项目中包含2个c文件(…...
Zabbix监控之分布式部署
文章目录 Zabbix监控之分布式部署zabbix proxy概述部署zabbix-proxy节点规划基础环境准备安装proxy以及数据库配置数据库添加服务端host解析修改zabbix-proxy配置文件启动代理服务器 zabbix页面(1)在zabbix页面添加代理(2)zabbix-agent连接proxy Zabbix监控之分布式部署 zabbi…...
TMSpeech:开源本地语音转文字工具的隐私革命
TMSpeech:开源本地语音转文字工具的隐私革命 【免费下载链接】TMSpeech 腾讯会议摸鱼工具 项目地址: https://gitcode.com/gh_mirrors/tm/TMSpeech 在数字化办公浪潮中,语音转文字工具已成为效率提升的关键助手,但云端处理的隐私泄露风…...
基于YOLO的安全帽佩戴检测系统~Python+模型训练+2026原创+YOLO算法
项目简介 基于 YOLO 的智能安全帽佩戴检测平台,面向施工现场图片识别、检测记录管理与安全宣传信息展示等业务场景。系统后端采用 Flask 搭建 RESTful API 服务,结合数据库进行业务数据持久化存储,并通过 JWT 实现用户身份认证与接口访问控制…...
别再让AI单打独斗了:用MCP协议手把手教你搭建一个能‘对话’的智能体协作系统
从零构建智能体协作系统:基于MCP协议的周末旅行规划实战 想象一下这样的场景:周五晚上,你对着手机说"帮我规划一个去杭州的周末旅行",30秒后,一份完整的行程建议出现在屏幕上——包含根据实时天气推荐的穿搭…...
AI教材写作新趋势,低查重助力高效教材编写!
编写痛点与AI解法 整理教材的知识点简直就是一项“精细的工作”,其难点在于如何保持平衡与衔接性!要么令人担忧的是核心知识点的遗漏,要么把握不好难度的层次——小学教材往往深奥,让学生难以理解;高中教材却又过于浅…...
射频工程师必备:如何用ADS仿真优化PA和LNA的噪声系数?
射频工程师必备:ADS仿真优化PA与LNA噪声系数的实战手册 在5G和物联网设备爆发式增长的今天,射频前端模块的性能直接决定了通信质量的上限。作为射频电路设计的核心环节,功率放大器(PA)和低噪声放大器(LNA)的噪声系数优化,往往是决…...
告别重复编码:用快马AI一键生成团队协作网盘高效开发框架
最近在开发一个团队协作网盘系统时,发现很多基础功能其实都是重复性工作。比如权限管理、文件版本控制这些模块,每个项目都要从头写一遍。后来尝试用InsCode(快马)平台的AI生成功能,效率提升特别明显。这里分享下我的实践心得: 权…...
【Visual Leak Detector】跨平台 QT 项目集成 VLD 的便携式部署方案
1. Visual Leak Detector 与 QT 开发的那些事儿 做 C 开发的朋友应该都遇到过内存泄漏这个头疼的问题。特别是用 QT 开发跨平台应用时,随着项目规模扩大,内存管理就变得格外棘手。Visual Leak Detector(简称 VLD)这个轻量级工具简…...
TPAMI 2026 | 雨雾噪模糊全搞定!CPL 框架让图像复原告别单一任务限制
点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达在日常拍摄中,一张照片可能同时遭遇噪声、雾霾、雨滴等多种退化问题,而传统图像复原方法要么只能处理单一退化类型,要么在多任务场景下…...
鼎捷T100——快速构建简易报表:azzi310与azzi910的高效协作
1. 从零开始:理解鼎捷T100报表开发的核心模块 第一次接触鼎捷T100系统时,我被各种功能模块搞得晕头转向。直到真正用azzi310和azzi910协作完成报表开发,才发现这套组合拳的妙处。简单来说,azzi310就像你的SQL编辑器报表设计器&…...
Wan2.2-I2V-A14B实战案例:为本地餐饮店生成15秒抖音爆款菜品视频
Wan2.2-I2V-A14B实战案例:为本地餐饮店生成15秒抖音爆款菜品视频 1. 项目背景与价值 对于本地餐饮商家来说,短视频营销已经成为吸引顾客的重要手段。然而,专业视频制作成本高、周期长,很多小店难以承担。Wan2.2-I2V-A14B文生视频…...
