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

网站制作新技术杭州网站建设书生商友

网站制作新技术,杭州网站建设书生商友,如何搭建本地wordpress,如何在服务器上发布网站目录 命令行参数 环境变量 环境变量的获取 环境变量本地变量 环境变量的操作 程序地址空间(进程地址空间,也叫虚拟地址空间) 定义 进程独立性解释 空间划分 页表 结论 虚拟地址空间存在原因 小知识 命令行参数 C/C中&#xff0c…

目录

命令行参数

环境变量

环境变量的获取

环境变量·本地变量

环境变量的操作

程序地址空间(进程地址空间,也叫虚拟地址空间)

定义

进程独立性解释

空间划分

页表

结论

虚拟地址空间存在原因

小知识


命令行参数

 C/C++中,main函数实际上有三个参数,分别是int agrc、char* agrv[ ]、char* envp[ ],argc表示argv中元素个数,argv代表命令行参数表,envp代表着环境变量表。

linux中我们输入的命令实际上会被当做一个字符串的输入,然后每个空格都会被拆分成一个字符串,形成一个二维字符串数组,存到argv中,这就是命令行参数表。

例:比如 ls -a -l 会被拆分成ls一个字符串,-a一个字符串,-l一个字符串,形成一个char* argv[3]字符串数组

 

所以命令行参数表从用户的输入中来。

环境变量

解释:是系统级别的全局变量,具备不同用途。(比如ls、pwd等命令)

 

linux中,环境变量存储在一个称为environ的字符指针数组中。这个数组的每个元素都是一个字符串,形式为VAR_NAME=value,其中VAR_NAME是环境变量的名称,value是与之相关联的值。

比如ls、pwd等的值value是路径,所以我们在执行这个命令程序时可以直接输入命令,无需提供路径,系统会自动在环境变量表中寻找,找到执行,未找到报错。

环境变量的获取

1.main的第三个参数char* envp[ ]

envp就是一个字符串数组,存的就是环境变量的字符串,可以直接在程序中使用envp获取。

 

2.getenv()函数   包含在<stdlib.h>中,linux使用man getenv查询

 

3.通过C语言提供的全局变量char **environ获取

那么,进程是怎么获取环境变量的呢,实际上,是父进程获取了环境变量,形成了环境变量表,传给子进程。

而bash,也就是最高的父进程的环境变量表,一部分从系统的配置文件中来,一部分通过系统调用来动态获取(所以只要不删配置文件,删除后重启环境变量表仍存在)

创建子进程时,环境变量表和命令行参数表都会被继承

环境变量·本地变量

环境变量具有全局属性:bash往下的每个子进程都可以使用。

本地变量:只在bash内有效,不会被子进程继承

abab就是本地变量

 

那为什么echo可以获取本地变量呢,因为echo是内建命令,不是可执行程序,cd也是如此。

环境变量的操作

export 变量名=值   导入环境变量

unset 变量名  取消环境变量

set打印环境变量和本地变量

程序地址空间(进程地址空间,也叫虚拟地址空间)

定义

 本质上是PCB内的内核数据结构(mm_struct,叫内存描述符)。

进程创建时,操作系统会给其分配一块虚拟的空间,大小为整个内存的大小,mm_struct中会有指向各个分区的开始和结束地址的指针。

但,实际上,操作系统不会真的直接给一个进程全部的内存空间,毕竟还有其他进程,只是通过一个页表来将虚拟的地址映射到物理地址上,映射到物理空间上,只占一块空间,所以说是虚拟地址空间。

  

所以进程在访问内存时,要先进行虚拟地址到物理地址的映射,找到物理内存,然后访问。 

虚拟地址空间的大致布局如下,

进程独立性解释

1.当子进程修改数据时,会进行写时拷贝,开新的物理空间,将内容拷贝过去,更改页表映射关系(工作全由操作系统自动完成,用户不知道)。但是虚拟地址不变,只是物理地址变了

2.如果子进程未修改数据,子进程页表的映射的物理地址和父进程的相同。

 

空间划分

对于一个分区(比如栈区、堆区等)来说,其实只需要有指向区域开始地址和结束地址指针即可表明这段区域。

所以在mm_struct中,会存在成对的虚拟指针,而页表中会存在其指针映射

页表

储存虚拟地址和物理地址的映射关系,会对虚拟地址进行像rwx这样的权限标记。

结论

1.地址空间只要存在,那么全局数据区就存在,所以全局变量会一直存在,包括static变量。

2.代码区中有个字符常量区,字符串常量其实和代码是编译在一起的,都是只读的。

3.为什么字符串常量不可修改:字符常量区权限为只读,页表会对这块区域做权限限制,禁止写入操作

4.const是用来告诉编译器的,对于我们对字符常量进行写入的操作,加const会在编译时报错,不加会在运行时报错。

5.命令行参数和环境变量都是属于父进程地址空间的数据资源,和代码区数据区一样,子进程会继承父进程的地址空间,所以子进程就获得了命令行参数和环境变量。

虚拟地址空间存在原因

1.虚拟地址的存在让要访问内存,必须先进行虚拟地址到物理地址的转换(并进行安全审核),保证了物理内存的安全,防止进程改变影响到其他进程。

2.将在物理内存中散乱分布的代码和数据通过映射关系变得有序,方便了进程访问。

3.内存管理和进程管理进行解耦合

小知识

1.进程中的变量或函数基本是通过虚拟地址来访问的,而不是通过变量名和函数名

2.task_struct存在与虚拟地址空间布局的顶部

http://www.dtcms.com/wzjs/253721.html

相关文章:

  • 营销型网站建设文章软文推广的优点
  • 兰州系统开发关键词优化排名网站
  • 长沙 网站建设发布新闻的平台有哪些
  • 百度地图在线使用导航系统正规seo一般多少钱
  • 高校两学一做网站建设b站推广有用吗
  • ps专门做兼职的网站百度客户服务电话
  • 网站的文本链接怎么做百度推广竞价
  • 平台式网站模板下载地址网络营销成功案例3篇
  • 南京网络推广网站seo营销培训咨询
  • 深圳网站建设seo优化谷歌商店官网
  • 深圳网站建设公司排名苏州企业网站关键词优化
  • 烟台哪个公司做网站好《新闻联播》今天
  • 网站第三方微信登陆怎么做的互联网产品推广
  • 对我国政府门户网站建设的思考优化推广
  • 比较好的网站建设品牌设计免费发布平台
  • 5种可以给网站带来流量的方式百度小程序对网站seo
  • 新密市城乡建设局网站新东方小吃培训价格表
  • 公司做网站费用南阳网站seo
  • 免费建站免费使用的网站上海seo推广方法
  • 自己做盗版小说网站吗常德网站建设公司
  • 网站安全维护内容网址查询网站
  • 赶集网网站建设分析海外推广代理商
  • wordpress下拉式友情链接seo范畴
  • 营销型企业网站网络公司主要做哪些
  • 百讯科技网站建设上海seo公司排名榜
  • 团购网站建设成都网站建设方案优化
  • 宁波市节约型机关建设考试网站河北网站推广
  • 企业网站平台如何做网络推广关键词调词平台哪个好
  • 将自己做的网站发布到网上农村电商平台
  • 网页设计与制作实训报告心得体会2000字上海优化seo排名