【C++】如何搞定 C++ 内存管理?

一,C/C++的内存分布

1.1C/C++内存分布

在C语言阶段学习的时候,总会有一些问题就是我们写过的各种各样的代码,局部变量,全局变量,静态变量等它们到底是存在哪的呢?相信有很多人在学C/C++的时候会有这些疑问,下面就来看看C/C++中的内存分布:

代码语言:javascript

AI代码解释

int globalVar = 1; static int staticGlobalVar = 1; void Test() { static int staticVar = 1; int localVar = 1; int num1[10] = { 1, 2, 3, 4 }; char char2[] = "abcd"; const char* pChar3 = "abcd"; int* ptr1 = (int*)malloc(sizeof(int) * 4); int* ptr2 = (int*)calloc(4, sizeof(int)); int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4); free(ptr1); free(ptr3); }

上面代码中的一些局部变量、全局变量、静态变量、数组、指针等都存在什么地方?

说明:

  1. 栈又叫堆栈:存储非静态局部变量/函数参数/返回值等等,栈是向下增长的。
  2. 内存映射段:是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信.
  3. 堆:用于程序运行时动态内存分配,堆是可以上增长的。
  4. 数据段:存储全局数据和静态数据。
  5. 代码段:可执行的代码/只读常量。
1.2函数栈帧的创建和销毁

上面我们看到的大部分在函数内部创建的变量,指针,数组,它们基本都是在栈区创建的说明栈区对我们来说也是一块比较重要的区域,那么为什么它们是存在栈区的呢?

  1. 内存管理的高效性:栈区采用后进先出(LIFO)的分配机制,内存分配和释放仅需移动栈指针,速度极快。函数调用时,栈指针下移分配空间;函数返回时,栈指针上移自动回收内存,无需复杂的内存管理操作。
  2. 生命周期与函数调用匹配:局部变量的生命周期严格绑定函数执行周期。栈区的自动分配和释放特性完美契合这一需求,避免了手动管理内存的复杂性,减少内存泄漏风险。 下面我们就简单来看看函数栈帧的创建和销毁:

在这里插入图片描述

下面以一个简单的main函数调用Add函数为例来看看,函数栈帧创建和销毁的具体过程:

在这里插入图片描述

二,C语言中的动态内存管理方式

在C语言中,内存管理是通过我们之前所学过的三个内存函数,malloc calloc realloc来管理的,比如下面这段代码:

www.dongchedi.com/article/7592326493200482841
www.dongchedi.com/article/7592329049750995481
www.dongchedi.com/article/7592327070701961753
www.dongchedi.com/article/7592322906135413273
www.dongchedi.com/article/7592308231180026392
www.dongchedi.com/article/7592331190716498457
www.dongchedi.com/article/7592320610865676825
www.dongchedi.com/article/7592326493201007129
www.dongchedi.com/article/7592322714795688510
www.dongchedi.com/article/7592327392942178841
www.dongchedi.com/article/7592319617927283225
www.dongchedi.com/article/7592327476282638873
www.dongchedi.com/article/7592319094112846360
www.dongchedi.com/article/7592326854393152025
www.dongchedi.com/article/7592319386741244441
www.dongchedi.com/article/7592321316729504281
www.dongchedi.com/article/7592319724022039102
www.dongchedi.com/article/7592327140348379672
www.dongchedi.com/article/7592319412238418457
www.dongchedi.com/article/7592319724022137406
www.dongchedi.com/article/7592319070578917950
www.dongchedi.com/article/7592317677180486168
www.dongchedi.com/article/7592331430680953368
www.dongchedi.com/article/7592317943112057368
www.dongchedi.com/article/7592312482736685593
www.dongchedi.com/article/7592326787452011070
www.dongchedi.com/article/7592320171805934142
www.dongchedi.com/article/7592312175293891097
www.dongchedi.com/article/7592326095602221593
www.dongchedi.com/article/7592313460353466942
www.dongchedi.com/article/7592315921234985497
www.dongchedi.com/article/7592318584517493310
www.dongchedi.com/article/7592313903104164377
www.dongchedi.com/article/7592314981853905432
www.dongchedi.com/article/7592327419139654169
www.dongchedi.com/article/7592312482736620057
www.dongchedi.com/article/7592327392941589017
www.dongchedi.com/article/7592313382368297497
www.dongchedi.com/article/7592317900531548734
www.dongchedi.com/article/7592315372943327769
www.dongchedi.com/article/7592311873639432729
www.dongchedi.com/article/7592316979160121918
www.dongchedi.com/article/7592312719127511577
www.dongchedi.com/article/7592316786557616664
www.dongchedi.com/article/7592327116290032153
www.dongchedi.com/article/7592326416835002904
www.dongchedi.com/article/7592313347400270360

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

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

相关文章

如何快速安装rEFInd主题美化:终极极简风格配置指南

如何快速安装rEFInd主题美化:终极极简风格配置指南 【免费下载链接】refind-theme-regular 项目地址: https://gitcode.com/gh_mirrors/ref/refind-theme-regular rEFInd主题美化是提升系统启动界面视觉效果的重要方式,通过极简风格设计能够实现…

ChronoEdit-14B:物理推理AI图像编辑黑科技

ChronoEdit-14B:物理推理AI图像编辑黑科技 【免费下载链接】ChronoEdit-14B-Diffusers 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/ChronoEdit-14B-Diffusers 导语 NVIDIA最新发布的ChronoEdit-14B模型,通过突破性的时间推理能力&…

ms-swift支持语言学习口语对话练习

ms-swift赋能语言学习:打造智能口语对话教练 在AI技术席卷各行各业的今天,教育领域正经历一场静默而深刻的变革。尤其是语言学习——这个长期依赖“背单词练听力外教课”的传统模式,正在被大模型驱动的智能系统重新定义。想象这样一个场景&am…

5个关键步骤实现Grok-2大语言模型本地化部署

5个关键步骤实现Grok-2大语言模型本地化部署 【免费下载链接】grok-2 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/grok-2 想要在本地环境中运行强大的Grok-2大语言模型吗?通过HuggingFace生态系统,您可以轻松实现这一目标。本文将带您…

使用ms-swift进行银行信贷风险建模

使用 ms-swift 构建智能信贷风控系统:从技术选型到生产落地 在银行风控一线工作的工程师都知道,一个贷款申请背后可能藏着几千字的客户描述、多页征信报告摘要、通话录音转写文本,甚至还有上传的工资流水截图。如何高效理解这些复杂信息&…

【C++】C++类和对象—(中)

前言:在上一篇类和对象(上)的文章中我们已经带领大家认识了类的概念,定义以及对类和对象的一些基本操作,接下来我们要逐步进入到类和对象(中)的学习。我们将逐步的介绍类和对象的核心——类和对象的六个默认成员函数。(注意:这六个…

IBM Granite-4.0:23万亿token的多语言代码神器

IBM Granite-4.0:23万亿token的多语言代码神器 【免费下载链接】granite-4.0-h-small-base 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/granite-4.0-h-small-base 导语 IBM最新发布的Granite-4.0-H-Small-Base模型以23万亿token的训练规模和多语…

使用ms-swift进行短视频内容审核模型训练

使用 ms-swift 构建短视频内容审核系统:从模型训练到生产落地 在抖音、快手、TikTok 等平台日均处理数十亿条视频的今天,内容安全早已不是“人工关键词过滤”能应对的挑战。一个用户上传的15秒短视频,可能包含衣着暴露的画面、隐喻低俗的文案…

【C++】类和对象—(下) 收官之战

前言:上一篇文章我们向大家介绍了类和对象的核心六个成员函数中的4个,其余两个以及初始化列表,static成员,内部类,匿名对象等会在本篇文章介绍!一,运算符重载1.1什么是运算符重载?类…

Keil5 IDE搭建从零实现——适合初学者的实践教程

从零搭建Keil5开发环境:手把手带你点亮第一颗LED 你是不是也曾在搜索“keil5安装教程”时,被一堆碎片化、步骤跳跃甚至版本过时的内容搞得一头雾水?下载失败、激活卡顿、编译报错……明明只是想写个简单的GPIO控制程序,却在环境搭…

Lance数据库终极指南:如何实现100倍性能提升的向量检索

Lance数据库终极指南:如何实现100倍性能提升的向量检索 【免费下载链接】lance lancedb/lance: 一个基于 Go 的分布式数据库管理系统,用于管理大量结构化数据。适合用于需要存储和管理大量结构化数据的项目,可以实现高性能、高可用性的数据库…

Keil MDK入门要点:时钟配置向导使用教程

Keil MDK实战入门:手把手教你用好时钟配置向导你有没有遇到过这样的情况?刚写完UART初始化代码,串口却输出一堆乱码;或者接上USB设备,电脑死活识别不了。排查半天,最后发现——原来是系统时钟没配对&#x…

终极视频画质革命:本地AI让模糊影像重获新生

终极视频画质革命:本地AI让模糊影像重获新生 【免费下载链接】SeedVR-7B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/SeedVR-7B 还在为那些珍贵的家庭录像画质模糊而遗憾吗?那些记录着重要时刻的视频,因为年代久远…

【C++】类和对象——(上)

前言:结束了C入门的学习紧接着就步入到了C类和对象的学习,类和对象比C入门更具有挑战性,类和对象相比C语言就像是进入了一个完全不同的世界,让我们一起探索一下c类和对象的奥妙。一,类1.1类的概念C 中的类(…

ms-swift框架下能源消耗预测与优化模型开发

ms-swift框架下能源消耗预测与优化模型开发 在工业智能化浪潮中,一个现实挑战正日益凸显:如何让动辄数十GB的大模型真正“跑得动、用得起、控得住”?尤其是在能源管理系统这类对实时性、成本和可靠性要求极高的场景里,传统AI工程流…

Cider音乐播放器:重新定义跨平台Apple Music体验的完美方案

Cider音乐播放器:重新定义跨平台Apple Music体验的完美方案 【免费下载链接】Cider A new cross-platform Apple Music experience based on Electron and Vue.js written from scratch with performance in mind. 🚀 项目地址: https://gitcode.com/g…

Paper服务器防作弊系统:从基础配置到高级防御的完整指南

Paper服务器防作弊系统:从基础配置到高级防御的完整指南 【免费下载链接】Paper 最广泛使用的高性能Minecraft服务器,旨在修复游戏性和机制中的不一致性问题 项目地址: https://gitcode.com/GitHub_Trending/pa/Paper Paper服务器作为高性能Minec…

终极指南:如何将《命运石之门0》中的阿玛迪斯AI助手带到你的安卓手机

终极指南:如何将《命运石之门0》中的阿玛迪斯AI助手带到你的安卓手机 【免费下载链接】Amadeus A side project that aims to replicate the Amadeus App shown in Steins;Gate 0. 项目地址: https://gitcode.com/gh_mirrors/am/Amadeus 想要体验科幻动漫《命…

终极iOS开发资源宝典:Navigate让界面设计变得如此简单

终极iOS开发资源宝典:Navigate让界面设计变得如此简单 【免费下载链接】awesome-ios A collaborative list of awesome for iOS developers. Include quick preview. 项目地址: https://gitcode.com/gh_mirrors/awe/awesome-ios 在iOS应用开发领域&#xff0…

基于ms-swift的城市建筑三维重建模型

基于 ms-swift 的城市建筑三维重建模型 在智慧城市和数字孪生的浪潮中,如何快速、精准地构建大规模城市级三维模型,正成为制约产业落地的关键瓶颈。传统依赖激光雷达扫描或人工建模的方式,不仅成本高昂、周期漫长,更难以应对城市动…