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

简答了解环境变量是什么

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

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

相关推荐
Trouvaille ~9 分钟前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
芷栀夏17 分钟前
深度解析 CANN 异构计算架构:基于 ACL API 的算子调用实战
运维·人工智能·开源·cann
全栈工程师修炼指南26 分钟前
Nginx | stream 四层反向代理:SSL、PREREAD 阶段模块指令浅析与实践
运维·网络·网络协议·nginx·ssl
旖旎夜光1 小时前
Linux(13)(中)
linux·网络
威迪斯特1 小时前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver
一方热衷.2 小时前
在线安装对应版本NVIDIA驱动
linux·运维·服务器
独自归家的兔2 小时前
ubuntu系统安装dbswitch教程 - 备份本地数据到远程服务器
linux·运维·ubuntu
m0_694845572 小时前
tinylisp 是什么?超轻量 Lisp 解释器编译与运行教程
服务器·开发语言·云计算·github·lisp
ONE_SIX_MIX2 小时前
ubuntu 24.04 用rdp连接,桌面黑屏问题,解决
linux·运维·ubuntu
龙飞052 小时前
Systemd -systemctl - journalctl 速查表:服务管理 + 日志排障
linux·运维·前端·chrome·systemctl·journalctl