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

东莞海边网站建设工作室上海网站排名优化推荐

东莞海边网站建设工作室,上海网站排名优化推荐,手机wap网站下载,深圳建设局投标网站✅1主页#xff1a;#xff1a;我的代码爱吃辣 #x1f4c3;2知识讲解#xff1a;Linux——程序地址空间 ☂️3开发环境#xff1a;Centos7 #x1f4ac;4前言#xff1a;我们一直随口就能说出来的栈区#xff0c;堆区#xff0c;常量… ✅1主页我的代码爱吃辣 2知识讲解Linux——程序地址空间 ☂️3开发环境Centos7 4前言我们一直随口就能说出来的栈区堆区常量区到底是什么今天学习一下进程地址空间。 目录 一.程序地址空间回顾 二. 进程地址空间 三.为什么要存在进程地址空间 四.malloc 和 new 的机制 一.程序地址空间回顾 我们在学习C语言的阶段大家一定见过这样的空间布局图 我们仅仅只是知道有这个东西 可是我们并不了解程序地址空间。 测试代码 #include stdio.h #include unistd.h #include stdlib.h int g_val 0; int main() {pid_t id fork();if (id 0){perror(fork);return 0;}else if (id 0) // child{printf(child[%d]: %d : %p\n, getpid(), g_val, g_val);}else // parent{printf(parent[%d]: %d : %p\n, getpid(), g_val, g_val);}sleep(1);return 0; }输出结果 我们发现输出出来的变量值和地址是一模一样的很好理解呀因为子进程按照父进程为模版父子并没有对变量进行进行任何修改。 我们尝试让子进程修改变量 测试代码 #include stdio.h #include unistd.h #include stdlib.h int g_val 0; int main() {pid_t id fork();if (id 0){perror(fork);return 0;}else if (id 0) // child{g_val 1000;printf(child[%d]: %d : %p\n, getpid(), g_val, g_val);}else // parent{printf(parent[%d]: %d : %p\n, getpid(), g_val, g_val);}sleep(1);return 0; }输出结果 我们发现父子进程输出地址是一致的但是变量内容不一样能得出如下结论: 变量内容不一样,所以父子进程输出的变量绝对不是同一个变量。但地址值是一样的说明该地址绝对不是物理地址在Linux地址下这种地址叫做 虚拟地址。我们在用C/C语言所看到的地址全部都是虚拟地址物理地址用户一概看不到由OS统一管理OS必须负责将 虚拟地址 转化成 物理地址 。 二. 进程地址空间 上面说到用C/C语言所看到的地址全部都是虚拟地址或者说叫做线性地址那么虚拟地址和物理地址有什么关系 引入地址空间 每一个进程都有自己的地址空间进程地址空间地址实际上就是虚拟地址。我们通过堆虚拟空间位置上的数据修改最终经过转换到物理内存上的数据修改。 虚拟地址是如何与物理地址进行映射的呢 因为有页表的存在。 页表是一种K/V映射表连接虚拟内存与物理内存每一个进程都会有自己的进程地址空间那么每一个进程地址空间都会有与之对应的页表。 注意 通过页表不仅可是实现虚拟地址到物理地址的映射问题同时因为中间多了一层结构就是的我们可以通过页表这个桥梁堆访问的地址进行权限的审核 。每一个进程都有自己的地址空间和页表进程虚拟空间仅仅通过页表堆物理内存交互这也是保证进程独立性的手段之一。 如何解释上面同一个地址却又不同的值的现象 创建子进程的本质就是创建了子进程PCB和加载对应的代码和数据。子进程和父进程代码共享数据在修改时会发生写是拷贝。 注意 上面的图就足矣说名问题同一个变量地址相同其实是虚拟地址相同内容不同其实是被映射到了不同的物理地址 三.为什么要存在进程地址空间 如果没有进程地址空间直接映射到物理地址不是更好吗省去这么多中间的转换。效率不是更高吗 如果没有进程地址空间OS直接将映射到物理地址如果有那一次我们地址映射错了就有可能映射到其他地址空间上这样进程之间独立性就会被破坏。 使用了地址空间就不会出现进程错误的访问其他进程的地址空间吗是的即使我们出现了错误地址错误的地址也是一个虚拟地址仍然在该进程的地址空间内而地址空间是每一个进程独立的映射到物理地址也是独立的。 综上所述 防止地址随意的访问保护物理内存与其他进程。将进程管理和内存管理进行耦合。可以让进程一同意的视角看待自己的代码和数据。 四.malloc 和 new 的机制 我们在使用malloc和new的时候我们都知道他们的功能都是在堆上开辟空间然后返回开辟的空间的首地址。 如果我们开辟了空间我们不去使用那么这个空间会属于我们吗 注意 操作系统补办不允许任何浪费或者不高效我们申请了空间一般不会立马得到空间只会给你分配虚拟内存不会立马给你物理内存。只有当我们对这块空间使用的时候才会将物理内存给分配到位。我们称这种机制叫做缺页中断。
http://www.dnsts.com.cn/news/198425.html

相关文章:

  • 做网站价格 网络推广托管服务建e网室内设计网别墅
  • 正规网站有哪些网站建设计算机人员招聘
  • 做网络运营需要掌握什么seo广州工作好吗
  • 建网站那家好长沙建站做企业网站公司
  • 如何逐步提升网站权重园林绿化东莞网站建设
  • 专业网站建设网站推广辽宁省网站备案系统
  • 替网站做任务怎么做的西安网页开发公司
  • asp与sql网站建设现在手机网站用什么做
  • 网站建设经验介绍网站开通支付宝支付
  • 购物网站建设需要什么资质酷播wordpress视频插件
  • 淮安建设机械网站制作鲜花网站建设解决方案
  • 佛山网站建设哪家评价高孝感做网站
  • wordpress 微信 模板佛山网站优化指导
  • 网站seo策划方案网站建设套餐服务
  • wordpress怎么关闭网站旅游景区网站设计
  • 青岛可以做网站的公司医疗网站建设信息
  • 制作企业网站的问题做导航网站不侵权吗
  • 国内美食网站欣赏互联网营销的方法有哪些
  • 专题类响应式网站建设宝安网站建设信科免费
  • 做一元购网站社区网站建设平台
  • 江桥做网站长沙seo代理
  • 焦作电子商务网站建设案例海口网站开发公司电话
  • 阿里云做淘宝客网站宝塔建设网站
  • 有没有代做模型的网站长春服务好的网站建设
  • 广州网站建设商城辽宁建设工程信息网盲盒
  • 做品牌折扣的网站广州冼村租房
  • 科技企业网站设计制作微信音乐做mp3下载网站
  • 鲜花网站有关建设建设网站江西
  • 古典网站建设公司网站建设制作设计开发
  • 站长统计工具山西城乡和住房建设厅网站首页