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

简答了解环境变量是什么

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

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

相关推荐
Yana.nice15 小时前
openssl将证书从p7b转换为crt格式
java·linux
AI逐月15 小时前
tmux 常用命令总结:从入门到稳定使用的一篇实战博客
linux·服务器·ssh·php
想逃离铁厂的老铁15 小时前
Day55 >> 并查集理论基础 + 107、寻找存在的路线
java·服务器
小白跃升坊16 小时前
基于1Panel的AI运维
linux·运维·人工智能·ai大模型·教学·ai agent
跃渊Yuey16 小时前
【Linux】线程同步与互斥
linux·笔记
杨江16 小时前
seafile docker安装说明
运维
舰长11516 小时前
linux 实现文件共享的实现方式比较
linux·服务器·网络
好好沉淀16 小时前
Docker开发笔记(详解)
运维·docker·容器
zmjjdank1ng16 小时前
Linux 输出重定向
linux·运维
路由侠内网穿透.16 小时前
本地部署智能家居集成解决方案 ESPHome 并实现外部访问( Linux 版本)
linux·运维·服务器·网络协议·智能家居