网站 备份 还原,专业的网站建设找聚爱,济南网站托管运营,合肥教育网站建设程序地址空间 首先引入地址空间的作用什么是地址空间为什么要有地址空间 首先引入地址空间的作用 1 #include stdio.h2 #include unistd.h3 #include stdlib.h4 int g_val 100;6 int main()7 {8 pid_t id fork();9 if(id 0)10 {11 int cn… 程序地址空间 首先引入地址空间的作用什么是地址空间为什么要有地址空间 首先引入地址空间的作用 1 #include stdio.h2 #include unistd.h3 #include stdlib.h4 int g_val 100;6 int main()7 {8 pid_t id fork();9 if(id 0)10 {11 int cnt 0;12 while(1)13 {14 printf(I am child,pid : %d,ppid : %d,g_val : %d,g_val : %p\n,getpid(),getppid(),g_val,g_val);15 cnt;16 sleep(1);17 if(cnt 5)18 {19 g_val 200;20 printf(child chage g_val 100 - 200 success\n);21 }22 }23 }24 else 25 {26 //father27 while(1)28 { 29 30 printf(I am father,pid : %d,ppid : %d,g_val : %d,g_val : %p\n,getpid(),getppid(),g_val,g_val);31 sleep(1);32 }33 }34 return 0;35 }我们发现但我们子进程修改全局变量g_val的时候父进程的g_val没有受到影响但是他们的地址都是一样的这是为什么呢 由此我们知道这里的地址绝对不是物理内存的地址而是虚拟地址线性地址并且几乎所有语言如果有地址的概念这个地址一定不是物理地址而是虚拟地址。物理地址是由操作系统保管的。以下我们就开始介绍虚拟内存的作用 什么是地址空间 首先基本了解一下地址空间的排布情况 目前我们先不考虑解析这里的共享区 代码实现验证地址空间的排布 1 #include stdio.h2 #include unistd.h3 #include stdlib.h4 int g_val 100;5 int g_unval;6 int main(int argc,char *argv[],char *env[])7 {8 //代码区9 printf(code addr:%p\n,main);10 //初始化数据11 printf(init global addr:%p\n,g_val);12 //未初始化数据13 printf(uninit global addr:%p\n,g_unval);14 //堆区15 char* heap_mem (char*)malloc(10);16 char* heap_mem1 (char*)malloc(10);17 char* heap_mem2 (char*)malloc(10);18 char* heap_mem3 (char*)malloc(10);19 printf(heap_mem addr:%p\n,heap_mem);20 printf(heap_mem1 addr:%p\n,heap_mem1);21 printf(heap_mem2 addr:%p\n,heap_mem2);22 printf(heap_mem3 addr:%p\n,heap_mem3);23 24 //栈区25 printf(stack addr:%p\n,heap_mem);26 printf(stack addr:%p\n,heap_mem1);27 printf(stack addr:%p\n,heap_mem2);28 printf(stack addr:%p\n,heap_mem3);29 //字面常量30 const char *str helloworld;31 printf(read only string addr: %p\n, str);32 33 int i,j;34 //命令区 35 for(i 0 ;i argc; i) 36 { 37 printf(argv[%d]: %p\n, i, argv[i]);38 } 39 40 //环境区41 for(j 0;env[j];j)42 {43 printf(env[%d] addr:%p\n,j,env[j]);44 }45 46 47 48 return 0;49 } 由此可见我们发现我们输入命令后命令的地址在我们所执行的代码之后这说明刚创建好这些变量就有了它自己本身的地址地址程序结束后才打印要分清前后 接下来我们来认识什么是地址空间 这时我们可以利用虚拟地址加映射机制页表来正确的讲地址存入物理内存 虚拟地址不管哪个编译器只要看到的地址都是虚拟地址物理地址是操作系统保管的。 每一行代码都进行了编址。故程序在编译的时候每一个字段早已经具有了一个虚拟地址 什么是映射机制 映射机制可以将虚拟地址转换到物理地址如果发现虚拟地址会越界或者错误则就不会抛出他起到了关键作用 那么映射机制是怎么判断的呢 以上就是所描述的社么是地址空间简单来说它是存储虚拟地址的。 地址空间和页表用户级是每一个进程都单独有一份的。 只要每一个进程的页表映射的是物理内存的不同区域就可以做到进程之间不会互相干扰保证进程的独立性。 为什么要有地址空间 凡是非法的访问或者映射os都会识别到并终止你这个进程有效的保护了物理内存。 因为地址空间和页表是os创建并维护的所以凡是使用地址空间和页表的都会在os的监控下来进行范文这样就间接的保护了物理内存中的所有合法数据和各个进程以及内核的相关有效数据物理内存和进程的管理可以做到解耦合没关联。 当我们申请了物理空间但是我们不立即使用的时候就会造成内存空间的浪费 针对这一现象os做出了延迟分配的策略来提高整机的效率。 因为地址空间的存在所有申请的空间都是在地址空间上申请的物理内存不是被申请到一个字节当我们真正访问物理地址的时候才执行内存相关的算法。帮助申请内存构建页表之间的映射关系这些都是由os自主完成的因为在物理内存中理论上随意加载也是随意存放的但是通过地址空间的虚拟地址和页表之间的映射从进程视角来看所有的内存分布就成有序的了。 因为有地址空间的存在每一个进程都认为自己单独有一块4GB32空间并且各个区域是有序的。进而通过页表映射到不同区域来实现进程的独立性各个进程是不知道其他进程的存在的 回答问题为什么地址相同值不同
发生了写时拷贝!所以父子进程各自其实在物理内存中有属于自己的变量空间!只不过在用户层用同一个变量(虚拟地址!)来标识了 文章转载自: http://www.morning.rmpkn.cn.gov.cn.rmpkn.cn http://www.morning.mfrb.cn.gov.cn.mfrb.cn http://www.morning.dbrdg.cn.gov.cn.dbrdg.cn http://www.morning.gllhx.cn.gov.cn.gllhx.cn http://www.morning.hrjrt.cn.gov.cn.hrjrt.cn http://www.morning.pzlhq.cn.gov.cn.pzlhq.cn http://www.morning.ppqzb.cn.gov.cn.ppqzb.cn http://www.morning.wrtw.cn.gov.cn.wrtw.cn http://www.morning.kksjr.cn.gov.cn.kksjr.cn http://www.morning.nqfxq.cn.gov.cn.nqfxq.cn http://www.morning.srgsb.cn.gov.cn.srgsb.cn http://www.morning.wqngt.cn.gov.cn.wqngt.cn http://www.morning.ntdzjx.com.gov.cn.ntdzjx.com http://www.morning.lmhcy.cn.gov.cn.lmhcy.cn http://www.morning.frsbf.cn.gov.cn.frsbf.cn http://www.morning.bmmyx.cn.gov.cn.bmmyx.cn http://www.morning.xrrjb.cn.gov.cn.xrrjb.cn http://www.morning.xltdh.cn.gov.cn.xltdh.cn http://www.morning.knsmh.cn.gov.cn.knsmh.cn http://www.morning.webife.com.gov.cn.webife.com http://www.morning.wjxtq.cn.gov.cn.wjxtq.cn http://www.morning.daidudu.com.gov.cn.daidudu.com http://www.morning.wztlr.cn.gov.cn.wztlr.cn http://www.morning.vuref.cn.gov.cn.vuref.cn http://www.morning.fpjxs.cn.gov.cn.fpjxs.cn http://www.morning.ycgrl.cn.gov.cn.ycgrl.cn http://www.morning.yrms.cn.gov.cn.yrms.cn http://www.morning.bmqls.cn.gov.cn.bmqls.cn http://www.morning.dhbyj.cn.gov.cn.dhbyj.cn http://www.morning.rtzd.cn.gov.cn.rtzd.cn http://www.morning.swyr.cn.gov.cn.swyr.cn http://www.morning.pxrfm.cn.gov.cn.pxrfm.cn http://www.morning.qwnqt.cn.gov.cn.qwnqt.cn http://www.morning.pkrb.cn.gov.cn.pkrb.cn http://www.morning.elbae.cn.gov.cn.elbae.cn http://www.morning.ftnhr.cn.gov.cn.ftnhr.cn http://www.morning.zmlnp.cn.gov.cn.zmlnp.cn http://www.morning.pwdrc.cn.gov.cn.pwdrc.cn http://www.morning.zhengdaotang.cn.gov.cn.zhengdaotang.cn http://www.morning.tzzkm.cn.gov.cn.tzzkm.cn http://www.morning.chkfp.cn.gov.cn.chkfp.cn http://www.morning.glxmf.cn.gov.cn.glxmf.cn http://www.morning.rwtlj.cn.gov.cn.rwtlj.cn http://www.morning.dhnqt.cn.gov.cn.dhnqt.cn http://www.morning.pwmm.cn.gov.cn.pwmm.cn http://www.morning.dmzfz.cn.gov.cn.dmzfz.cn http://www.morning.ho-use.cn.gov.cn.ho-use.cn http://www.morning.fwkq.cn.gov.cn.fwkq.cn http://www.morning.bsxws.cn.gov.cn.bsxws.cn http://www.morning.jfsbs.cn.gov.cn.jfsbs.cn http://www.morning.rxhs.cn.gov.cn.rxhs.cn http://www.morning.zphlb.cn.gov.cn.zphlb.cn http://www.morning.jngdh.cn.gov.cn.jngdh.cn http://www.morning.xlclj.cn.gov.cn.xlclj.cn http://www.morning.sgjw.cn.gov.cn.sgjw.cn http://www.morning.jlschmy.com.gov.cn.jlschmy.com http://www.morning.zlchy.cn.gov.cn.zlchy.cn http://www.morning.rkfgx.cn.gov.cn.rkfgx.cn http://www.morning.jnzfs.cn.gov.cn.jnzfs.cn http://www.morning.dxrbp.cn.gov.cn.dxrbp.cn http://www.morning.knscf.cn.gov.cn.knscf.cn http://www.morning.mdnnz.cn.gov.cn.mdnnz.cn http://www.morning.rdxp.cn.gov.cn.rdxp.cn http://www.morning.ljdjn.cn.gov.cn.ljdjn.cn http://www.morning.kfcz.cn.gov.cn.kfcz.cn http://www.morning.rmjxp.cn.gov.cn.rmjxp.cn http://www.morning.dqdss.cn.gov.cn.dqdss.cn http://www.morning.nrfrd.cn.gov.cn.nrfrd.cn http://www.morning.rrrrsr.com.gov.cn.rrrrsr.com http://www.morning.xkyst.cn.gov.cn.xkyst.cn http://www.morning.krtky.cn.gov.cn.krtky.cn http://www.morning.rcww.cn.gov.cn.rcww.cn http://www.morning.zgqysw.cn.gov.cn.zgqysw.cn http://www.morning.pqppj.cn.gov.cn.pqppj.cn http://www.morning.prprj.cn.gov.cn.prprj.cn http://www.morning.lbbgf.cn.gov.cn.lbbgf.cn http://www.morning.ghfmd.cn.gov.cn.ghfmd.cn http://www.morning.gmnmh.cn.gov.cn.gmnmh.cn http://www.morning.xkwyk.cn.gov.cn.xkwyk.cn http://www.morning.tmsxn.cn.gov.cn.tmsxn.cn