码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【深入理解C++】内存布局


    关于 C++ 的内存布局,网上说法不一,有人将其分为 4 4 4 区,也有人将其分为 5 5 5 区,不同的人分成的 5 5 5 区也不尽相同,造成这种差异的主要原因是C语言和C++语言的发展背景、个人的分类喜好、个人的命名习惯等。

    在本文中,笔者将 C++ 内存详细分为 5 5 5 个区域,如下图所示。

    在这里插入图片描述

    • 栈区:由编译器自动分配和释放,主要存放函数的参数值、局部变量值等。

    • 堆区:由程序员主动分配和释放,可以通过 malloc()/free() 或 new/delete 来分配和释放。

    • 全局/静态存储区:全局变量和(局部)静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和静态变量在相邻的另一块区域(C语言区分初始化的和未初始化的,C++没有这个区分)。程序结束后由系统释放。

    • 常量存储区:存放我们代码中的常量、字符串常量等,这样做的目的是为了节省空间,避免重复申请内存。程序结束后由系统释放。

    • 程序代码区:存放函数体(包括类的成员函数、全局函数)的二进制代码。

    堆和栈的区别:

    • 栈:空间是有限的,分配速度快,程序员控制不了。
    • 堆:只要不超出实际拥有的物理内存,同时也在操作系统允许能够分配的最大内存大小之内,都可以分配成功。分配速度比栈慢,程序员可以随时用 malloc()/free() 或 new/delete 来分配和释放,非常灵活。

    参考文章:

    • C/C++内存分区
    • C/C++中堆区和自由存储区的区别与联系
    • C/C++程序内存布局
  • 相关阅读:
    虹科分享 | 选择SAS还是NVMe?虹科网络基础带您一探究竟!
    中介子方程二十九
    什么是单片机最小系统
    c#弹性和瞬态故障处理库Polly
    【信管2.2】项目管理知识体系与组织结构
    定个小目标之刷LeetCode热题(20)
    并发编程用到的函数解析
    【2012】408联考数据结构真题整理
    怎样将例化的uvn test包含在verdi的instance中,并将其中变量加入到dump的波形中(方便verdi追test以及debug)
    Java 插入公式到PPT幻灯片
  • 原文地址:https://blog.csdn.net/qq_42815188/article/details/127812394
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号