网站开发需求做娱乐网站被坑
web/
2025/10/1 10:01:13/
文章来源:
网站开发需求,做娱乐网站被坑,app推广平台,做数据可视化的网站#x1f4d8;北尘_#xff1a;个人主页 #x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上#xff0c;不忘来时的初心 [TOC](文章目录) 一、程序地址空间回顾
我们在讲C语言的时候#xff0c;老师给大家画过这样的空间布局… 北尘_个人主页 个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上不忘来时的初心 [TOC](文章目录) 一、程序地址空间回顾
我们在讲C语言的时候老师给大家画过这样的空间布局图 下图是内存吗答案不是它是进程/虚拟地址空间。 可是我们对他并不理解 来段代码感受一下 #include stdlib.h
#include unistd.h
#include stdio.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{ //parentprintf(parent[%d]: %d : %p\n, getpid(), g_val, g_val);}sleep(1);return 0;}输出 我们发现输出出来的变量值和地址是一模一样的很好理解呀因为子进程按照父进程为模版父子并没有对变量进行进行任何修改。可是将代码稍加改动
#include stdlib.h
#include unistd.h
#include stdio.h
int g_val 0;
int main()
{pid_t id fork();if(id 0){perror(fork);return 0;}else if(id 0){ //child,子进程肯定先跑完也就是子进程先修改完成之后父进程再读取g_val100;printf(child[%d]: %d : %p\n, getpid(), g_val, g_val);}else{ //parentsleep(3);printf(parent[%d]: %d : %p\n, getpid(), g_val, g_val);}sleep(1);return 0;}输出 我们发现父子进程输出地址是一致的但是变量内容不一样能得出如下结论:
变量内容不一样,所以父子进程输出的变量绝对不是同一个变量但地址值是一样的说明该地址绝对不是物理地址在Linux地址下这种地址叫做 虚拟地址我们在用C/C语言所看到的地址全部都是虚拟地址物理地址用户一概看不到由OS统一管理。
OS必须负责将 虚拟地址 转化成 物理地址 。
二、进程地址空间
所以之前说‘程序的地址空间’是不准确的准确的应该说成 进程地址空间 那该如何理解呢看图
虚拟地址空间
说明 上面的图就足矣说名问题同一个变量地址相同其实是虚拟地址相同内容不同其实是被映射到了不同的物理地址
三、为什么要存在进程地址空间
让进程以统一的视角看待内存所以任意一个进程可以通过地址空间页面也可以将乱序的内存数据变得有序分门别类的规划好。可以安全检查。将进程管理和内存管理解耦。通过页表让进程映射到不同的物理内存从而实现进程的鼓励性。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84987.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!