简答了解环境变量是什么
1概念
- 一般是操作系统中用来指定操作系统的一些参数
- 我们在编写C/C++代码时,链接时,在环境变量的帮助下链接动静态库。
- 环境变量通常具有某种特殊用途,还在系统中具有全局特性。
1.1命令行参数



在bash的划分下,进程的内部拥有一张argv表,用来实现选项功能。
main的命令行参数,是实现程序不同子功能的方法!!指令选项的实现原理。
2一个例子,一个环境变量
2.1要执行一个程序,必须先找到它。
bash通过PATH(环境变量)来找。
2.2系统中存在环境变量,来帮助系统找到目标的二进制文件。
环境变量:PATH->系统中搜索指令的默认路径!!!
env查看环境变量(名称=内容)

1如何理解环境变量??存储的角度
执行指令的过程
执行一个指令"ls -a -b",bash先拿到,划分出命令行参数表
环境变量表,bash用它去找ls是否存在,存在,就创建子进程,并执行它。

2环境变量最开始从哪里来??
系统的相关配置文件来的!!!!

3认识更多的环境变量

4.获取环境变量的方法操作
4.1操作
export
4.2代码
方法一

方法二

方法三

5理解环境变量的特性
5.1环境变量具有全局性(可以被继承)
5.2两个理解
a本地变量不会被子进程继承,只能在bash内部使用!!(bash内部会记录两套变量 环境和本地)
b我们的环境变量是在谁里面???
bash里面
内建命令,bulit-in-command,不需要创建子进程,而是让bash亲自执行,自己调用函数或者系统调用。
程序地址空间
各个区域的对应情况

在栈和堆空间的中间有一段镂空的空间程序地址空间,不是内存。
进程地址空间(虚拟地址空间)这是一个系统的概念,不是语言层的概念。

这里的地址是虚拟地址,(C/C++语言用到的所有地址都是虚拟地址)
1怎么解释上述问题呢
- 1-1一个进程,一个虚拟地址空间。
- 1-2一个进程,一套页表。
- 1-3页表是用来做虚拟地址和物理地址的映射的


2虚拟地址和进程地址空间(3是什么?)

4怎么办

linux源码是怎么搞的呢?????

地址转换

- 1无序变有序->因为页表映射的存在,程序在物理内存中理论上是可以在任意位置加载的。它可以将虚拟地址和物理地址进行映射,在进程视角所有内存分布都是有序的。
- 2在地址转换过程中,对你的地址和操作进行合法性判定,进而保护了物理内存!
- a.什么是野指针
- b.char*str="helloworld";*str="H";在字符常量区写入的时候就会奔溃??查找页表的时候权限拦截了。
- 3让进程管理与内存管理,进行一定程序的解耦和。
对于堆(这样零散分区的)我们是如何进行管理的

