程序是怎么运行起来的?

目录


为什么要了解内存布局?

想象一下,你搬进了一栋新房子,却不知道卧室、厨房、卫生间、杂物室....分别在哪儿,你每天起床找个马桶都跟玩密室逃脱似的,是不是很崩溃?

计算机的内存就像你的"数字房子",不了解它的布局,代码写着写着就容易"走错房间",结果就是 ------ 程序崩溃,电脑蓝屏,领导白眼...

内存的"房间"都有哪些?

复制代码
高地址  +------------------+
       |    环境变量区    | ← 环境变量(房间的空气)
       +------------------+
       |    命令行参数区  | ← 命令行参数(入户门)
       +------------------+
       |       栈区       | ← 函数调用,局部变量
       |                  |
       +------------------+
       |       ↓↓↓        | ← 栈向下增长
       |                  |
       +------------------+
       |       自由       | ← 未使用的内存空间
       |                  |
       +------------------+
       |       ↑↑↑        | ← 堆向上增长
       |                  |
       +------------------+
       |       堆区       | ← 动态分配内存
       |                  |
       +------------------+
       |    未初始化数据段 | ← 未初始化的全局变量
       |     (BSS段)      |
       +------------------+
       |    已初始化数据段 | ← 已初始化的全局变量
       |     (Data段)     |
       +------------------+
低地址  |     代码段       | ← 程序的指令代码
       +------------------+

下面就模拟一个程序运行起来的,从程序的视觉看看,一个程序都需要住进哪几个房间,这些房间都提供了什么服务。

一个程序能运行起来,需要如下几个步骤:

  • 用代码编译出来的执行包;
  • 运行执行包的时候,需要向系统申请内存存储变量,和调用计算指令。
    系统不会预先分配固定内存,而是根据程序需求动态调整。

每个内存房间都有特定的功能,当然也有所受的限制。

理解这些机制有助于优化程序性能和稳定性。

TODO...(用到在查吧。。)

Reference

https://www.cnblogs.com/xiaokang-coding/p/18799190

相关推荐
_YouziTech_4 天前
【STM32+MAX98357】MP3转PCM存入Flash并控制音频输出
stm32·单片机·音视频·内存·pcm·i2s·wav
极光通讯7 天前
国产存储替代进展:长鑫DDR5与长江存储企业级SSD的适配现状
服务器·数据库·内存
数据库小学妹13 天前
MySQL内存占用过高怎么排查?分层定位与OOM根因
数据库·经验分享·mysql·内存·oom
云计算练习生15 天前
什么是内存分配算法?首次适应、最佳适应、最坏适应
操作系统·内存·内存分配算法·内存算法
云计算练习生15 天前
什么是内存映射(mmap)?文件和内存之间的桥梁
操作系统·内存·内存映射
skywalk816318 天前
windows10 explorer占用太多内存问题解决
服务器·内存·windows10·explorer
MicrosoftCloud20 天前
性能排查 01|free 显示内存用了 90% 就是快满了吗?buff/cache 与 available 一次讲清
linux·运维·内存·free·buff/cache
张星河zen1 个月前
512GB RDIMM问世 AI服务器内存进入HBM+DDR5+CXL三层架构时代
内存·存储·堆叠·池化·hbm·rdimm·512gb
玄芯散人2 个月前
【筑基·047】内存Hierarchy:寄存器到硬盘的速度差
缓存·内存·计算机基础
路弥行至2 个月前
ROS2 通信避坑实录:从 topic/msg 底层原理到一次内存错位复盘
网络·经验分享·笔记·其他·内存·topic·ros2