首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

linux-环境变量,进程地址空间

<<endl; return 0; } 1.2查看环境变量方法 echo $NAME //NAME: 你的环境变量名称 1.3常见环境变量 PATH : 指定命令的搜索路径.... env: 显示所有环境变量 4. unset: 清除环境变量 5. set: 显示本地定义的 shell 变量和环境变量 1.5通过代码如何获取环境变量 命令行第三个参数...2.2进程地址空间 通过下面这段代码我们可以发现一个问题,就是在子进程改掉全局变量g_val之后,子进程和父进程的g_val发生了变化,这是正常的,因为进程间具有独立性,但是地址确是一样的,那么同一个地址可能存储两个不一样的值吗...那么每一个进程运行之后都有自己的进程地址空间,并且在os层面都要有页表映射结构,那么子进程在创建出来后会继承父进程的大部分数据,当然包括这张页表,所以我们在上面的测试中能够看到g_val这个变量在子进程和父进程的地址是一样的...,所以我们能看到g_val这个变量在子进程和父进程的地址是一样的,因为是虚拟内存,但是值却不一样,因为通过页表映射的物理地址不一样。

9110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    程序优化之”变量名长短”,内存逻辑地址,物理地址

    程序优化为何没有说明”变量名长度” 网上有着不少常见的程序优化点的文章,比如PHP中使用单引号、双引号的性能差别等等。...但这其中并没有说到”变量名长度”会影响性能,那么它为什么不会影响性能呢,就需要引入我们今天要讲的这篇文章的知识了。...变量名在编译过后的程序中是以内存地址存在的。所以它的长度不会影响程序性能,只会占用你的代码文件大小(基本可以忽略) 引用一下文献说明 接下来,汇编器会将汇编代码转换为二进制目标代码文件。...(一个空教室,小明已经坐了一个位置,其他同学不能坐在他大腿上了诶) 物理内存地址 上面这个概念就是物理内存地址,描述说明在硬件中实际的储存位置(好比 二排三列) 逻辑内存地址 那么我们的程序在编译完成之后...+ 1· 申请一块内存,储存代码$b的值,对应的物理内存地址为 ·Location + 1 + 1· 这里用1来代表一个变量需要占用的大小(仅仅为了说明,每个语言的数据结构不同) 这就是相对的逻辑内存地址了

    65710

    Python进阶:如何将字符串常量转为变量?

    1、如何动态生成变量名?...因为,如果能解决这个问题,那就意味着可以不作预先定义,而是动态地生成变量名,这不仅能减少给变量取名的麻烦,还实现了自动编码!...在数据结构层面上,空列表 [] 作为一个值(value)跟它的字符串键值绑定在一起,而在运用层面上,它作为变量内容而跟变量名绑定在一起。...4、总结 抽象一下最初的问题,它实际问的是“如何将字符串内容作为其它对象的变量名”,更进一步地讲是——“如何将常量转化为变量 ”。 使用直接进行赋值的静态方法,行不通。...两位同学提出的方法都是间接的动态方法:一个是动态地进行变量赋值,通过修改命名空间而植入变量;一个是动态地执行代码,可以说是通过“走后门”的方式,安插了变量。

    4.1K20

    【Linux】进程>环境变量&&地址空间&&进程调度

    int main() { printf("%s\n", getenv("PATH")); return 0; } 常用getenv和putenv函数来访问特定的环境变量 1.8...能得出如下结论: 变量内容不一样,所以父子进程输出的变量绝对不是同一个变量 但地址值是一样的,说明,该地址绝对不是物理地址!...在Linux地址下,这种地址叫做 虚拟地址 我们在用C/C++语言所看到的地址,全部都是虚拟地址!...物理地址,用户一概看不到,由OS统一管理 OS必须负责将 虚拟地址 转化成 物理地址 2.3 进程地址空间 所以之前说‘程序的地址空间’是不准确的,准确的应该说成 进程地址空间 说明: 上面的图就足矣说名问题...,同一个变量,地址相同,其实是虚拟地址相同,内容不同其实是被映射到了不同的物理地址!

    6610

    如何将虚拟机的虚拟地址转化为宿主机的物理地址?

    当程序不分段时,找到堆中虚拟地值的物理地址很简单,物理地址 = 基地址 + 虚拟地址 当程序分段时,找到堆中物理地址会复杂一些,物理地址 = 基地址 + (虚拟地址 - 该段的开头的虚拟地址) 当不分段时...显然 物理地址 = 基地址 + 虚拟地址 当分段时:整个程序的内存空间不再连续,每一段都有自己独特的基地址,但是虚拟地址还是相对于之前只有一个基地址时的值,那么此时虚拟地址就无法直接表示其在第几个内存空间了...所以,我们需要虚拟地址相对于每个段自己的基地址的值,要完成这个操作只需要将虚拟地址 - 段开头的虚拟地址。...因此 物理地址 = 基地址 + 虚拟地址 - 段开头的虚拟地址 这块代码就是GVA->GPA的过程: [2w7vr4xv1g.png?...最终得到物理地址. Reference 1. 内存虚拟化 2. 虚拟地址到物理地址(内存虚拟化) 3. Linux上地址映射 4. 地址映射 —— 输出虚拟地址所对应的物理地址

    2.7K30

    【C 语言】变量本质 ( 变量修改 | 直接修改变量 | 通过内存地址间接修改变量 | 通过指针间接修改变量 )

    文章目录 一、变量修改 1、直接修改变量 2、通过内存地址间接修改变量 3、通过指针间接修改变量 一、变量修改 ---- 访问 变量 , 就是 访问 内存空间 ; 访问 指的是 读写 内存 ; 修改变量的方式...: 直接修改 : 通过 变量 , 可以 直接 修改内存 , 间接修改 : 通过取地址符 , 拿到变量所在内存的 地址编号 , 通过地址编号修改内存 ; 1、直接修改变量 #include 变量值 , 以及 a 的地址 // a=1, &a=6422220 // a 是内存地址 6422220 位置的 4 字节内存标号 printf("a=%d, &a=%d\...&a); // 间接修改 : // 获取 变量 a 的地址 , // 直接修改该地址对应的内存空间中的数据 *( &a ) = 2; printf("a=%d...d, &a=%d\n", a, &a); // 间接修改 : 通过内存地址 // 获取 变量 a 的地址 , // 直接修改该地址对应的内存空间中的数据 *( &a )

    1.3K10

    Python进阶:如何将字符串常量转化为变量?

    1、如何动态生成变量名?...因为,如果能解决这个问题,那就意味着可以不作预先定义,而是动态地生成变量名,这不仅能减少给变量取名的麻烦,还实现了自动编码!...在数据结构层面上,空列表 [] 作为一个值(value)跟它的字符串键值绑定在一起,而在运用层面上,它作为变量内容而跟变量名绑定在一起。...4、总结 抽象一下最初的问题,它实际问的是“如何将字符串内容作为其它对象的变量名”,更进一步地讲是——“如何将常量转化为变量 ”。 使用直接进行赋值的静态方法,行不通。...两位同学提出的方法都是间接的动态方法:一个是动态地进行变量赋值,通过修改命名空间而植入变量;一个是动态地执行代码,可以说是通过“走后门”的方式,安插了变量。

    1.4K00

    asnlookup.py:用于搜索特定组织的ASN和拥有的IP地址工具

    ASN是由互联网号码分配机构(IANA)分配给自治系统(AS)的唯一号码。...AS由IP地址块组成,这些IP地址具有明确定义的用于访问外部网络的策略,并由单个组织管理此工具将在更新的数据库中搜索特定组织的ASN,然后使用后者查找组织注册和拥有的所有IP地址(IPv4和IPv6)。...& cd Asnlookup $ pip install -r requirements.txt $ python asnlookup.py -o 端口扫描 该工具将IP地址列表导出为文本文件...Debian apt-get install nmap - On Ubuntu sudo apt-get install nmap - Mac OS brew install nmap 安装Masscan 下载地址...https://github.com/robertdavidgraham/masscan/要扫描IP地址,请Masscan的命令-m参数或Nmap的-n:$ python asnlookup.py -m

    1.6K30

    C++指针变量作函数参数接收数组地址

    C++指针变量作函数参数接收数组地址 在C++中,用指针变量指向数组元素时要注意: 指针变量p可以指向有效的数组元素,实际上也可以指向数组 以后的内存单元。...在上一节小林已经讲过:数组名代表数组首元素的地址,用数组名作函数的参数,传递的是数组首元素的地址,同样用指针变量作函数形参, 也可以接收从实参传递来的数组首元素的地址。 ...实参与形参的结合,有以下几种形式:  实参 形参 数组名 数组名 数组名 指针变量 指针变量 数组名 指针变量 指针变量 实参数组名array代表一个固定的地址,或者说是指针型常量,它的值是无法改变的;...而形参数组名是指针变量,并不是一个固定的地址值,它的值是可以改变的。...在函数调用开始时,它接收了实参数组首元素的地址,但在函数执行期间,它可以再被赋值。 8.2 C++指针变量作函数参数接收数组地址 更多案例可以go公众号:C语言入门到精通

    9512218

    python047_变量在内存内的什么位置_物理地址_id_内存地址

    变量在内存内的什么位置_物理地址_id_内存地址_物理地址 回忆上次内容 声明、赋值之前 不能使用变量声明、赋值了之后 才能使用变量添加图片注释,不超过 140 字(可选)顺序 必须 清清楚楚那 声明的...,不超过 140 字(可选)内存里面有很多字节 就像 楼房里面的小房间内存地址变量就存储在小房间中 内存地址 就是 小房间的门牌号码添加图片注释,不超过 140 字(可选)回游乐场 去问问 python...多次引用存'oeasy' 的 这块内存地址是唯一的这块地址 被 两个变量 所引用s1s2 两个变量都引用 这个房间号 添加图片注释,不超过 140 字(可选)但是 如果 又 给s1 再赋个新值那么...了解了 id 函数 id函数 可以得到变量对象 所引用的 唯一内存地址s1 = "oeasy" A = 10现在都是 用 字面量(literal)给变量 赋值添加图片注释,不超过 140 字(可选)...可以 用 变量给变量 赋值 吗?

    5210

    Python如何将列表元素转换为一个个变量

    python将列表元素转换为一个个变量的方法Python中,要将列表list中的元素转换为一个个变量的方法可能有很多,比如for循环,但这里将先介绍的一个是个人认为比较简单也非常直接的方法,就是通过直接将...Python列表中的元素赋值给变量的方法来完成,先来通过一个简单的实例来看一下这个方法,至于该方法中存在的问题,将在实例后面进行介绍,实例如下:>>> a = [1,{2,3},"hello"]>>>...b,c,d = a>>> b1>>> c{2, 3}>>> d'hello'该方法存在的两个问题如果变量的个数与列表中的元素的个数不同,比如少于的时候,Python会抛出ValueError: too...unpack (expected 2),如果多于的话,Python会抛出ValueError: not enough values to unpack;如果列表元素很多,那么也就可能需要去命名很多的变量...,因此,如果可以的话,就直接使用列表的索引值去进行Python程序的编写,尤其是可以配合for循环来进行(仅是个人观点,仅供参考);下面的实例将展示变量个数与列表中元素个数不同时的情况:>>> b,c

    22321

    【Linux】进程详解:命令行参数、环境变量及地址空间

    d. unset:清除环境变量 3.5 环境变量的组织形式 每个程序都会收到一张环境表,环境表是一个字符指针数组,环境变量的存储方式就是利用的指针数组,一个数组中存放了很多的指针,每一个指针都指向一个环境变量的首地址...PATH")); 7 return 0; 8 } 可以通过比较getenv(“USER”)来判断登陆用户是不是正确的,和权限建立起连接 常用putenv()和getenv函数来访问特定的环境变量...实际运行结果: 我们发现,父子进程,输出地址是一致的,但是变量内容不一样!能得出如下结论: 变量内容不一样, 所以父子进程输出的变量绝对不是同一个变量!...为了防止用户破坏系统中的空间,真正存储变量的空间由操作系统统一管理 所以上面&gval其实打印出来的是虚拟的地址空间,虚拟地址空间通过一系列的翻译转化可以通过「页表」映射到真正的物理地址空间,而子进程中的...小结 Linux命令行参数,环境变量,环境变量的学习重在理解,细节比较多,而且有很多新概念,所以认真,细心的学习环境变量是很重要的,地址空间让进程管理和内存管理互不干涉,起到了很大作用。

    14010
    领券