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

73.【C语言】C/C++的内存区域划分

目录

1.内存里的几个区域

2.示意图

3.解释


1.内存里的几个区域

除了耳熟能详的栈区,堆区,静态区,还有内核空间,内存映射段,数据段,代码段

2.示意图

3.解释

栈区(stack area):局部变量,函数参数,返回数据,返回地址

内存映射段:将文件映射到内存

映射的含义:

如果看过李忠老师的 《x86汇编语言 从实模式到保护模式 第二版》,其中写到了可以操作B800:0000~BFFF:000F的虚拟地址来向80*25的显示屏写入可视的文字

可以这样做的原因是:

(以下摘抄自P67~P68)

      为了给出要显示的字符,处理器需要访问显存,把字符的ASCI码写进去。但是,显存是位于显卡上的,访问显存需要和显卡这个外围设备打交道。同时,多一道手续自然是不好的,这当中最重要的考量是速度和效率。想想看,你让人传话给父母,和自己亲自往家里打电话,花费的时间是不一样的。为了实现一些快速的游戏动画效果,或者播放高码率的电影,不直接访问显在是办不到的。

      为此,计算机系统的设计者们,这些敢想敢干的人,决定把显存映射到处理器可以直接访问的地址空间里,也就是内存空间里

--------------------------------------------------------------------------------------------------------------------------

处理器-->显卡-->显存变成处理器-->内存(含映射的显存)

堆区(heap area):动态内存管理(malloc函数,realloc函数,calloc函数,free函数)

数据段(data  segment)(静态区):全局变量(如全局变量),静态数据(如静态变量(由static修饰))

代码段(code segment):存放函数体(类成员函数和全局函数)的二进制代码和只读常量(如常量字符串)


http://www.kler.cn/news/337305.html

相关文章:

  • [单master节点k8s部署]31.ceph分布式存储(二)
  • 医院管理新思维:Spring Boot技术应用
  • Maven 高级之分模块设计与继承、聚合
  • springboot中配置优先级
  • idea2023-快速搭建一个本地tomcat的javaWeb项目(从0到1保姆教学)
  • Ubuntu 中 Redis ,MySQL 基本使用
  • PostgreSQL技术内幕13:PostgreSQL通讯协议
  • LLM大模型学习总结
  • 基于SpringBoot+Vue的宠物店管理系统
  • Qt - ui界面点击加载一段时间后闪退
  • TryHackMe 第7天 | Web Fundamentals (二)
  • POST注入通过sqli-labs靶场less-11
  • Html批量转word工具2.1
  • 一个典型的cmakelists.txt
  • 18个Java语法糖
  • PHP 表单基础
  • erlang学习:Linux命令学习9
  • 计算机网络——DNS
  • Gitea 忘记密码解决方案
  • 基于单片机的信号选择与温度变化