神秘的环境变量和进程地址空间

简答了解环境变量是什么

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让进程管理与内存管理,进行一定程序的解耦和

对于堆(这样零散分区的)我们是如何进行管理的

相关推荐
June`几秒前
网络编程时内核究竟做了什么???
linux·服务器·网络
原来是猿8 分钟前
腾讯云服务器端口开放完全指南
服务器·网络·腾讯云
你的保护色39 分钟前
【无标题】
java·服务器·网络
楼兰公子1 小时前
RK3588 + Linux7.0.3 网络工程调试错误速查手册
linux·网络·3588
Elnaij1 小时前
Linux系统与系统编程(9)——自设计shell与基础IO
linux·服务器
IpdataCloud1 小时前
稳定的企业级IP数据接口怎么选?可用性指标+离线库高可用方案
运维·网络·tcp/ip
WebGIS开发1 小时前
地信职业百科②:GIS运维
运维·gis·就业·转行
淘矿人1 小时前
Claude辅助DevOps实践
java·大数据·运维·人工智能·算法·bug·devops
JiaWen技术圈1 小时前
nginx 安全响应头 介绍
运维·nginx·安全
IMPYLH1 小时前
Linux 的 unexpand 命令
linux·运维·服务器·bash