文章目录

  • 一、内存四区建立流程

一、内存四区建立流程


内存四区 建立流程 :

1. 加载代码到内存 : 操作系统 中 执行 可执行程序 , 将 存放在硬盘中的 可执行程序 ( 包含代码 ) 加载到内存中 , 这里的代码指的是 ELF 文件中汇编代码对应的机器码 ;

2. 将 C 代码在内存中分区 : 操作系统 将 C 代码 分为 444 个区 , 由上到下 : 堆区 , 栈区 , 全局区 , 代码区 ;

  • 堆区 : 开发者负责分配释放内存 , 调用 malloc / new 函数分配内存 , 调用 free / delete 函数释放内存 , 如果程序结束还没有释放内存 , 则 由操作系统回收内存 ;
  • 栈区 : 由 编译器 自动 分配 与 释放 , 存放函数 参数 , 局部变量值 ;
  • 全局区 :
    • 静态区 : 存放 全局变量 , 静态变量 ; 初始化的 全局变量 和 静态变量 放在一块区域 , 未初始化的 全局变量 和 静态变量 放在另外一块区域 ; 程序执行结束后由操作系统释放 ;
    • 常量区 : 存放 字符串常量 和 其它常量 , 程序结束后由 操作系统释放 ;
  • 代码区 : 存放 函数的 二进制代码 ;

3. 执行主函数 : 找到 main() 函数 , 并执行 ;

【C 语言】内存四区原理 ( 内存四区建立流程 )相关推荐

  1. 【内存】内存对齐 的原理

    目录 内存对齐的原因 内存对齐的原理 内存对齐的原因 1.平台原因(移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的:某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常. ...

  2. 【C 语言】内存四区原理 ( 常量区示例 | 不同函数返回的相同字符串的指针地址相同 )

    文章目录 前言 一.正常程序 二.获取相同的字符串内容 前言 C / C++ 编译器会对代码进行 词法分析 , 语法分析 , 句法分析 ; 然后对代码进行优化 ; 将 字符串常量 赋值给指针时 , 首 ...

  3. 【C 语言】内存四区原理 ( 栈内存属性增长方向 | 栈内存开口方向 | 代码示例 )

    文章目录 一.栈内存开口方向 二.栈内存开口方向代码示例 一.栈内存开口方向 栈内存的生长方向 : 先后定义两个变量 int a , b; 开口向上 : b 的地址 > a 的地址 , a 放在 ...

  4. c语言如何找到进程基址,从0开始学模拟挂(一)--找内存基址,包含原理 _ 脚本

    PS:12楼的兄弟,不能回到选择人物画面,那你就换个地图试试,也可以请看下篇,找内存基址方法(二), 有人问怎么自动加血,我板凳帖子里不是有了,读取血内存地址的代码了吗? 把那份代码,你用两次,第一次 ...

  5. 【C 语言】内存管理 ( 动态内存分配 | 栈 | 堆 | 静态存储区 | 内存布局 | 野指针 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  6. c语言中全局变量内存,C语言——全局变量和局部变量在内存中的区别——及编译后的内存分区【栈-堆-全局存储区-文字常量区-程序代码区】...

    目录: 一:全局变量 二:局部变量 三:C语言经过编译之后将内存分为以下几个区域 (1)栈(stack) (2)堆(heap) (3)全局(静态)存储区 (4)文字常量区 (5)程序代码区 四:区别 ...

  7. 【C++探索之旅】第一部分第四课:内存,变量和引用

    内容简介 1.第一部分第四课:内存,变量和引用 2.第一部分第五课预告:简易计算器 内存,变量和引用 上一课<[C++探索之旅]第一部分第三课:第一个C++程序>中,我们已经学习了如何创建 ...

  8. OllyDBG 入门系列(四)-内存断点

    [原创]OllyDBG 入门系列(四)-内存断点 <!-- PHPForce - Joey修改性别 --><!-- /PHPForce - Joey修改性别 --> <! ...

  9. java 内存分配实例_java学习(四) —— 内存分配浅析

    前言 java中有很多类型的变量.静态变量.全局变量及对象等,这些变量在java运行的时候到底是如何分配内存的呢?接下来有必要对此进行一些探究. 基本知识概念: (1)寄存器:最快的存储区, 由编译器 ...

最新文章

  1. gulp插件之browser-sync安装报错
  2. 更改系统的默认安装路径
  3. Java记录-SpringMVC整合Echarts画地图加散点图
  4. windows 2008 server R2 版本概览
  5. linux小红帽实验心得,格林童话小红帽读书心得体会5篇
  6. java advance_JavaAdvance
  7. train和test的列分布差异(covariate shift)观察
  8. swift5优秀打印函数自定义
  9. AUTOSAR从入门到精通100讲(二十)-特斯拉、高通、华为AI处理器深度分析
  10. 【ElasticSearch】Es 源码之 SearchTransportService 源码解读
  11. java 输入框_Java文本框和文本区的输入输出
  12. java中的多对多关系解析_Java中多对多映射关系
  13. HttpHandler和ashx要实现IRequiresSessionState接口才能访问Session信息(转载)
  14. python风险评分卡系统_《智能风控:Python金融风险管理与评分卡建模》(梅子行,毛鑫宇)【摘要 书评 试读】- 京东图书...
  15. vue实例中使用swiper
  16. VSCode开发react-native app进行android apk打包
  17. PS中的文字叠加纹理
  18. #企业要求程序员统一电脑桌面,网友:桌面壁纸都不配拥有?
  19. input:-webkit-autofill
  20. php使用redis在windows下配置方法

热门文章

  1. Remove Duplicates from Sorted List
  2. 在Struts 2中实现文件上传
  3. 2019.05.15
  4. 绑定变量窥测(Bind Variable Peeking)
  5. DataTable筛选符合条件的DataRow
  6. setjmp()、longjmp() Linux Exception Handling/Error Handling、no-local goto
  7. SQL Server 事务隔离级别的解析
  8. IIS启动时出现0x8ffe2740的错误
  9. ATC打ABC142有感
  10. csharp:Chart