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

简答了解环境变量是什么

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

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

相关推荐
西西弗Sisyphus6 分钟前
理解 Linux 动态库加载:LD_LIBRARY_PATH
linux
AR-26710-7 分钟前
Linux Day31——实操启停服务改端口重启
linux·运维
百度Geek说39 分钟前
QCon上海2026:百度 SRE Agent 规模化落地实践解读
运维·自动化运维
叼烟扛炮1 小时前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
叼烟扛炮1 小时前
Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局
linux·网络·网络协议·php·tcpdump
星恒随风2 小时前
Linux网络编程:彻底理解IO多路复用select!从fd_set位图、读写就绪到手写TCP多客户端字典服务器
linux·服务器·网络
陈布衣2 小时前
MySQL(1)_MySQL 5.7.21 Linux 安装笔记
linux·笔记·mysql
分布式存储与RustFS4 小时前
给 RustFS 桶加一层内存缓存:用 Alluxio 让热数据少跑一遍网络
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
Oiiouui4 小时前
linux服务器部署Logto后端与对应前端的实现
linux·服务器·前端·后端