当前位置: 首页 > article >正文

C++程序的五大内存分区实例详解

C程序在运行时所占用的内存区域一般可分为栈内存区、堆内存区、全局/静态内存区、文字常量内存区及程序代码区5大分区下面使用日常开发中的编程实例详细介绍一下这5个分区以便大家能更深刻的理解这5大内存分区。1、栈内存区栈内存区是我们用的最多的分区只要有函数的地方都会使用到这个分区。栈分区是用来存放函数参数及函数局部变量值的内存区是由编译器在编译时自动分配和释放的。函数中的参数与函数中的局部变量占用的内存是代码执行到函数进入函数是分配的在离开时函数时这些内存会自动被释放。下面从下面几个简单的实例来更进一步地认识栈内存。1.1、调用函数时通过栈来传递函数的参数值调用函数时时通过栈传递参数值的即在调用函数之前要将函数的参数值依次压入到栈上然后再去call被调用函数的。这点从汇编代码上可以清晰地看出来。比如下面一段简单的实现两数相加的代码12345678910111213// 被调用函数intAddNum(inta,intb){intnSum a b;returnnSum;}// 调用内调用函数的实例代码inta 7;intb 8;intnSum AddNum(a, b);可以在VS中查看上述C代码对应的汇编代码。具体的做法是将上述代码拷贝到VS中启动VS调试在鼠标右键单击显示的右键菜单中点击“转到反汇编”区查看C代码对应的汇编代码从上述汇编代码可以看出在调用AddNum函数之前将要传入的参数a和参数b的值先压到栈上然后再去call AddNum函数。作为被调函数的AddNum会从栈上读取传入的参数内容。1.2、线程占用的栈内存是有上限的线程占用的栈内存是有上限的可以在创建线程时指定栈空间的大小。在Windows上线程默认的栈空间是1MB。线程在某一时刻的函数调用堆栈中的所有函数占用的栈空间总和就是当前时刻的线程占用的栈内存。进入函数时会将该函数的栈空间累计到所在线程的栈空间占用内存数上函数内部申请存放局部变量的栈空间离开函数则会释放它占用的栈空间就会将所在线程占用的栈内存数上减掉函该函数占用的空间。如果当前线程占用的栈空间大于线程的上限时一般是在进入一个函数时触发则会报出“stack overflow”的栈溢出异常程序会发生崩溃。这里有一点需要说明一下在某个函数中使用了switch...case语句语句中包含了多个case分支在这些分支中定义了一些局部变量虽然这些局部变量的生命周期只位于case子句中但是都是直接算在所在函数的栈空间上的是刚执行进函数就分配好了即便当前还没运行到对应的case子句中即便这些case子句的局部变量的生命周期仅在case子句内2、堆内存区堆内存也是我们最常用的内存区因为每个线程的栈内存是有限的我们一般将大部分数据要放置在堆内存中。在C中malloc/new申请的内存都是从堆内存上分配的用完后由free/delete区释放的。如果没有释放堆内存则程序结束时由操作系统统一回收。堆内存的管理比栈内存要复杂的多如果是堆内存异常导致的崩溃比栈内存异常比如内存越界引起内存访问为例导致的崩溃要难查的多。如果malloc/new来的内存在用完后没有释放则会导致内存泄露如果频繁执行的代码中有内存泄露则是致命的因为随着程序的运行时间的加长会产生越来越多的内存泄露如果将所属进程虚拟内存耗尽会产生“Out of memory”的异常程序直接闪退崩溃。3、全局/静态内存区全局变量和静态变量的内存就是在该区上分配的全局变量和静态变量的生命周期也是一样的都是在程序启动时分配内存的在程序退出时释放内存的。全局变量一般会使用extern关键字来声明比如1externintm_nClientId;而静态变量则是使用static关键字来声明1staticintnCount;全局变量和静态变量都要求在定义的时候要初始化注意此处讲的定义是和声明是相对应的概念。全局变量和静态变量的区别在于全局变量的作用域更广整个模块中都能使用。静态变量则因其定义的位置不同有不同的作用域。可以在函数中定义静态变量也可以在类中定义静态成员变量。函数中定义的静态变量只能在函数中被访问类中定义的静态变量则可以在类外部使用“类名::静态成员变量名”去访问。4、文字常量区该分区是用来存放常量值如常量字符串等比如如下的字符串常量将字符串常量的地址赋值给指针p1char* p ”thisis a test.”;该字符串占用的内存地址就是文字常量区内存上的。该部分内存中的内容是固定的常量是不允许修改的程序结束后由操作系统统一回收。这部分内容比较简单没什么要讲的。5、程序代码区前面说的内存都是数据段的内存是用来存放程序运行中的各种数据的该部分的内存是代码段的内存是用来存放程序二进制代码的。数据段的内存地址和代码段指令的地址完全是两个概念不能混为一谈。比如某个变量的内存地址是数据段的地址某条汇编指令的地址则是代码段的地址是两个完全不搭嘎的地址一定要区分开来。到此这篇关于C程序的五大内存分区实例详解的文章就介绍到这了,

相关文章:

C++程序的五大内存分区实例详解

C程序在运行时所占用的内存区域,一般可分为栈内存区、堆内存区、全局/静态内存区、文字常量内存区及程序代码区5大分区:下面使用日常开发中的编程实例,详细介绍一下这5个分区,以便大家能更深刻的理解这5大内存分区。1、栈内存区栈…...

C++程序简单示例

前言:很多小伙伴反应想要用C刷LeetCode,但是对于C语法不熟悉,对于很多算法和数据结构也不够了解。这就导致了刷题的时候需要四处查询资料,非常的麻烦。我们先来看一段C的示例代码:1234567// my first cpp file#include…...

C++ 常用关键字使用举例

1. static控制作用域、生命周期或类成员归属123456789101112131415// 1. 全局/命名空间:仅当前文件可见(避免跨文件重定义)static int global_static 10; // 其他文件无法通过 extern 访问// 2. 局部变量:生命周期延长至程序结束…...

告别“唯大厂论”:全球财富 500 强实体企业 IT 核心岗位的隐形红利

在当前的留学生家庭中,关于计算机科学(CS)与工程类专业的就业规划,往往笼罩着一种高度趋同的“名企焦虑”。许多家长和学生将目光死死锁定在硅谷的科技巨头或少数几家头部互联网大厂上。为了挤进这些竞争白热化的窄门,…...

RAPID-LLM:大模型分布式训练性能优化实践

1. RAPID-LLM:分布式LLM训练与推理的性能优化利器在当今AI领域,大语言模型(LLM)的训练与推理已成为技术前沿的热点。随着模型参数规模从十亿级向万亿级迈进,单卡GPU已无法满足计算和内存需求,分布式训练成为…...

Python在TVA算法架构优化中的创新应用(七)

前沿技术背景介绍:AI 智能体视觉系统(TVA,Transformer-based Vision Agent),是依托Transformer架构与因式智能体所构建的新一代视觉检测技术。它区别于传统机器视觉与早期AI视觉,代表了工业智能化转型与视觉…...

Python在TVA算法架构优化中的创新应用(六)

前沿技术背景介绍:AI 智能体视觉系统(TVA,Transformer-based Vision Agent),是依托Transformer架构与因式智能体所构建的新一代视觉检测技术。它区别于传统机器视觉与早期AI视觉,代表了工业智能化转型与视觉…...

AI日志分析系统:多代理自修正RAG架构解析与实践

1. 日志分析系统的现状与挑战现代软件系统产生的日志数据正以惊人的速度增长。根据2023年DevOps状态报告,大型互联网公司每天产生的日志量普遍超过1TB,而传统金融系统的日志量也达到了数百GB级别。这些日志包含了系统运行状态、错误信息、性能指标等关键…...

独享IP+动态IP结合核心逻辑,破解稳定与灵活的矛盾

在代理IP使用中,稳定与灵活往往难以兼顾:独享IP专属可用、纯净度高、稳定性强,适合长期业务,但灵活性不足,长期固定易被标记、封禁;动态IP切换灵活、IP资源充足,能规避封禁风险,但共…...

轮式与足式移动机器人的运动学/动力学约束与控制分析

轮式与足式移动机器人的运动学/动力学约束与控制分析 摘要 移动机器人按移动方式可大致分为轮式机器人、足式机器人与轮足混合式机器人三大类。轮式机器人在平坦地面上具有高速高效率的优势,但因非完整约束导致运动自由度受限;足式机器人能够通过离散落足…...

Cgo 中正确设置 C 结构体回调函数指针的完整方案

...

使用 Tonic 构建高性能异步 gRPC 服务

使用 Tonic 构建高性能异步 gRPC 服务 在分布式系统开发中,gRPC 作为 Google 开源的高性能 RPC 框架,凭借 Protobuf 二进制序列化的高效性和 HTTP/2 传输的优势,成为服务间通信的首选方案。而在 Rust 生态中,Tonic 框架以其原生异…...

06华夏之光永存・开源:黄大年茶思屋第20期全套解题战略总结

06华夏之光永存・开源:黄大年茶思屋第20期全套解题战略总结 一、摘要 本次黄大年茶思屋第20期5道核心技术难题,均直指鸿蒙全场景生态、端侧算力调度、跨端多媒体交互、智能家居感知、端侧系统优化等华为核心技术布局卡点。全套难题通过原约束过渡攻坚底层…...

05华夏之光永存・开源:黄大年茶思屋榜文解法「第20期 5题」 面向通用场景的泛屏幕视频重构技术

华夏之光永存・开源:黄大年茶思屋榜文解法「第20期 5题」 面向通用场景的泛屏幕视频重构技术 一、摘要 泛屏幕视频重构与跨屏适配领域,全球现代工程常规优化已触达绝对性能天花板,现有显著性检测硬切缩放、固定比例裁剪、单模态超分等方案、固…...

【2026年最新600套毕设项目分享】奶茶点餐小程序(30180)

有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 项目演示视频2 项目演示视频3 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远…...

CSS如何实现动态菜单导航栏_利用Flexbox与-hover交互

Flexbox导航栏需设display: flex和flex-wrap: nowrap;子项用flex: 1均分,或flex: 0 1 auto保自然宽;注意box-sizing、hover预占位、伪元素滑入、可访问性及IE11兼容写法。Flexbox布局让导航栏自动均分宽度用 display: flex 是最直接的解法&am…...

大模型的探索与实践-课程笔记(十一):大模型发展史与全球厂商业态全景

第一部分:从 NLP 到 Transformer 的底层架构演进早期的自然语言处理(NLP)主要依赖特征提取,大模型的基石是 Google 提出的架构革命。1. Transformer 与注意力机制 (2017年)起源:Google 2017年发表神作《Attention is a…...

AI分析报告参考:麦肯锡结构化分析核心使用原则

AI分析报告参考:麦肯锡结构化分析体系 目录 AI分析报告参考:麦肯锡结构化分析体系 一、底层唯一核心法则:MECE法则 麦肯锡原生定义 麦肯锡标准MECE拆解维度(5种通用合规维度) 正反案例(贴合你的工作场景) 反例(不符合MECE) 正例1(流程维度,严格符合MECE) 正例2(要…...

企业数仓揭秘:数据决策背后的核心引擎

公司里人人都在提的“数仓”,到底是什么? 目录 公司里人人都在提的“数仓”,到底是什么? 一、一句话讲透:数仓到底是什么? 二、关键区分:数仓 vs 业务数据库,90%的人都搞混了 三、为什么现在几乎所有公司,都必须建自己的数仓? 四、企业数仓的核心架构:分层设计,到…...

大模型的探索与实践-课程笔记(十):机器学习发展史

第一部分:机器学习的“三起两落”发展史在这个发展史中,每一次神经网络的崛起都伴随着“算力/数据”的支持,而每一次跌落都源于“可解释性”与“应用局限”的限制。1. 第一起与第一落 (1950s - 1960s):感知机与符号主义高光时刻&a…...

担忧重复电视败局,空调双巨头用专利打击互联网空调,空调老二或败落!

近期空调双巨头之一的企业与一家互联网空调企业的专利诉讼成为行业焦点,其实不止这一次,更早之前空调双巨头的另一家就已采取诉讼手段对付那家空调企业了,实在是他们担忧空调行业可能重复电视行业的败局。国内电视行业直到2015年左右逐渐形成…...

丰田之后,日产也开始大幅反弹,日本车在中国市场仍然奋力挣扎

丰田逐渐在中国市场站稳脚跟,甚至还在销量方面首次超越大众,它继续是日本汽车在中国市场的旗手,在它之外,日产给出的数据也显示它在中国市场大力度反弹,这显示出日本汽车仍然在中国市场拥有不少忠诚的消费者。东风日产…...

各地区环境规制强度政府工作报告文本词频2002-2023年

01、数据介绍根据各省份政府工作报告文本数据,对政府工作报告分词处理,统计了各省政府工作报告中与环境规制相关的关键词进行词频统计。数据名称: 各地区环境规制政府工作报告文本词频数据年份:2002-2023年02、数据指标行政区划代…...

中国城市建设数据库2002-2021年

01、数据介绍中国城乡建设数据库覆盖范围更广,包括全国693个城市的城乡建设相关指标数据,共计331个指标,主要针对城市的建设情况进行统计。统计范围为2002-2021年,数据来源为中国城市建设统计年鉴。主要包括城市市政公共设施、城市…...

前端八股文面经大全:TME QQ音乐前端二面(2026-04-22)·面经深度解析

前言 大家好,我是木斯佳。 相信很多人都感受到了,在AI浪潮的席卷之下,前端领域的门槛在变高,纯粹的“增删改查”岗位正在肉眼可见地减少。曾经热闹非凡的面经分享,如今也沉寂了许多。但我们都知道,市场的…...

VeriTrade代理验证技术:TLSNotary与ProxyTEE的融合应用

1. VeriTrade代理验证技术解析VeriTrade是一个典型的自动化交易代理系统,其核心创新点在于将TLSNotary协议与ProxyTEE技术相结合,构建了一个可验证的执行环境。这种架构设计主要解决了分布式系统中两个关键问题:一是如何证明代理确实执行了预…...

TorchTraceAP:PyTorch视觉模型性能优化新方案

1. TorchTraceAP:计算机视觉模型性能优化的新范式在计算机视觉模型的部署实践中,性能优化始终是工程师们面临的核心挑战。传统方法往往依赖人工分析运行轨迹(trace)数据,不仅耗时耗力,而且难以捕捉复杂的性…...

阿里云服务器利用宝塔搭建个人博客网站

① 云服务器环境准备与安全组配置 在开始搭建之前,我们需要先准备好“地基”。如果你已经拥有一台阿里云 ECS 实例,这一步主要是检查系统状态和网络策略。推荐使用 Ubuntu 20.04/22.04 或 CentOS 7/8 等主流 Linux 发行版,这些系统对宝塔面板…...

肝了三天三夜!最详尽的漏洞扫描工具实战笔记

GobyAWVS 漏洞扫描 提示提示: 本文里面很多工具都是网址,还有站长之家之类的,csdn一直判断成暗链,可以去我自己博客查看完整全文: 多说一句:csdn对网安真的不友好,全文链接都不让放。。。》[好淘…...

宝藏网站推荐:云服务器特惠与网安学习资源的一站式聚合平台

① 平台核心功能与新手入门指南 对于刚接触云计算和网络安全的朋友来说,面对海量的云厂商活动和零散的技术文档,最容易陷入“选择困难症”。今天想跟大家分享一个我最近常逛的宝藏聚合平台——好淘云。它不像那种冷冰冰的资源站,更像是一个由…...