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

单片机/C/C++八股:(十九)栈和堆的区别?

上一篇下一篇
C/C++ 中 sizeof 和 strlen 的区别

栈和堆的区别?

  1. 内存分配方式

    • :由系统自动分配和释放。函数调用时,局部变量、函数参数等会自动压入栈;函数返回时,这些数据自动弹出并释放。

    • :由程序员手动申请和释放(如 C/C++ 中使用malloc/freenew/delete)。若不手动释放,可能造成内存泄漏。

  2. 内存管理

    • :遵循“后进先出”(LIFO)原则,结构简单,管理高效。

    • :内存分配自由,可以动态申请任意大小的内存块,但管理复杂,容易产生碎片。

  3. 生命周期

    • :变量的生命周期与作用域绑定,离开作用域即被销毁。

    • :变量生命周期由程序员控制,直到显式释放或程序结束。

  4. 访问速度

    • :访问速度快,因为内存连续且由硬件支持(如寄存器指针直接操作)。

    • :访问速度相对较慢,涉及指针间接寻址,且可能触发操作系统内存管理机制。

  5. 空间大小

    • :通常较小(例如几 MB),受操作系统限制,容易发生栈溢出(如递归过深)。

    • :空间较大(受限于虚拟内存),适合存储大对象或长期存在的数据。

  6. 用途示例

    • :存储函数局部变量、返回地址、参数等。

    • :存储动态数据结构(如链表、树)、大数组、需要跨函数/模块共享的数据。

  7. 线程安全性

    • :每个线程有自己的栈,天然线程安全。

    • :多个线程共享堆,需加锁等同步机制避免竞争条件。

总结对比表:

特性栈(Stack)堆(Heap)
分配方式自动(系统管理)手动(程序员管理)
生命周期作用域结束自动释放手动释放或程序结束
访问速度较慢
内存大小小(有限)大(受限于虚拟内存)
碎片问题可能存在
典型用途局部变量、函数调用动态分配、大对象、共享数据
线程安全是(每个线程独立栈)否(需同步机制)

http://www.cnnetsun.cn/news/1421715.html

相关文章:

  • 单片机/C/C++八股:(二十)指针常量和常量指针
  • Three.js TSL实战:5分钟打造酷炫粒子鼠标跟随效果(附完整代码)
  • QCustomPlot图表范围控制完全指南:从rescaleAxes到setRange的5种应用场景
  • Anaconda管理深度学习训练环境:多版本Python控制
  • 嵌入式SHA256轻量实现:抗侧信道、恒定时间、MCU级哈希引擎
  • HarmonyOS开发实战指南(三)——从零构建鸿蒙原子化服务与Ability框架解析
  • 解决Overleaf中伪代码排版难题:从基础到高级配置全指南
  • 基于STM32+LiteOS的多传感器空气质量监测系统设计
  • java毕业设计基于springboot+vue的企业员工考勤管理系统
  • M2LOrder GPU算力适配方案:RTX 3060显存优化+FP16推理加速实测
  • 哪个降AI率的好?先看这5个评判标准再做选择
  • OpenClaw版本升级:Qwen3-32B兼容性测试与回滚方案
  • 效率直接起飞!AI论文网站 千笔·专业论文写作工具 VS Checkjie,全行业通用首选
  • ThinkPHP 6.x 安全漏洞深度解析:如何避免任意文件写入风险
  • Qwen3-ForcedAligner-0.6B应用实战:快速为卡拉OK音频生成精准歌词字幕
  • 嵌入式系统中的数据驱动编程实践
  • 5个实用技巧:轻松掌握BilibiliDown的视频下载功能
  • 从Kaggle实战看损失函数选择:为什么我的交叉熵模型总过拟合?(附解决方案)
  • 别再傻傻分不清了!一文搞懂Java中的ISO 8601、RFC 3339和微信支付time_expire
  • 从DHCP到静态IP:Ubuntu22.04网络配置全面解析(附Netplan最佳实践)
  • 告别手动配置!用Python脚本自动化你的CanFestival PDO映射(附源码)
  • 告别调参焦虑:用Simplify3D的‘打印进程’功能,为不同模型快速切换配置文件
  • jQuery Mobile 导航栏深度解析
  • 告别手动配环境:用Amber18的tleap脚本一键搞定蛋白-配体复合物拓扑文件
  • 告别云端API调用!手把手教你用Ollama+AnythingLLM在Windows/Mac上搭建个人DeepSeek知识库
  • Python 属性描述符:从原理到 ORM 实践详解
  • 用Nordic52832和6轴传感器DIY一个空中鼠标:从硬件选型到代码调试全记录
  • STM32开发实战:手把手教你实现代码重定位与BSS段清零(附完整代码)
  • Carsim多车仿真场景设置全攻略:从基础到高级(含常见问题解答)
  • 从Linux迁移到Windows?用Anaconda PowerShell Prompt无缝衔接你的终端习惯