【Linux】浅谈环境变量和进程地址空间
一、环境变量
基本概念
环境变量(Environment Variables)是操作系统提供的一种机制,用于存储和传递配置信息、系统参数、用户偏好设置等。
环境变量的作用
- 配置程序行为:
程序可以通过环境变量获取配置信息,例如日志级别、数据库连接信息、API 密钥等。
例如,LOG_LEVEL=DEBUG 可以设置程序的日志级别为调试模式。 - 指定系统路径:
环境变量可以指定程序或库的路径,例如 PATH 环境变量用于指定系统可执行文件的搜索路径。
例如,PATH=/usr/bin:/bin:/usr/local/bin 表示系统会在这些目录中查找可执行文件。 - 传递用户偏好设置:
环境变量可以存储用户的偏好设置,例如语言环境(LANG)、时区(TZ)等。
例如,LANG=en_US.UTF-8 设置了系统的语言环境为美国英语,使用 UTF-8 编码。 - 动态配置:
环境变量可以在运行时动态设置和修改,而无需重新编译程序。
例如,可以在启动脚本中设置环境变量,以控制程序的行为。
常见的环境变量
- PATH
用途:指定系统可执行文件的搜索路径。
示例:PATH=/usr/bin:/bin:/usr/local/bin
说明:当用户在终端中输入命令时,系统会在 PATH 指定的目录中查找可执行文件。 - HOME
用途:指定当前用户的主目录路径。
示例:HOME=/home/user
说明:程序可以使用 HOME 环境变量来访问用户的主目录,例如保存配置文件。 - LANG
用途:指定系统的语言环境。
示例:LANG=en_US.UTF-8
说明:设置系统的语言环境和字符编码,影响程序的输出和国际化行为。 - TZ
用途:指定系统的时区。
示例:TZ=America/New_York
说明:设置系统的时区,影响程序中日期和时间的显示。 - LD_LIBRARY_PATH
用途:指定动态链接器搜索动态库的路径。
示例:LD_LIBRARY_PATH=/usr/local/lib:/opt/lib
说明:动态链接器会在 LD_LIBRARY_PATH 指定的目录中查找动态库。 - USER
用途:指定当前登录的用户名。
示例:USER=zzx
说明:程序可以使用 USER 环境变量获取当前用户的名称。
查看环境变量
echo $NAME
其中NAME为你要查找的环境变量名称,比如PATH,USER等
可执行文件的默认执行路径
我们先写一个简单程序
#include <stdio.h>
int main()
{printf("hello world");return 0;
}
对上面的源代码编译形成一个可执行文件 hello
,当我们在命令行输入 hello
来执行这个可执行文件时候发现执行不了,报错 Command 'hello' not found
这是为什么呢?
其实在 Linux 和类 Unix 系统中,可执行文件的默认执行路径是由环境变量 PATH 决定的。PATH 环境变量是一个以冒号(:)分隔的目录列表,操作系统会在这些目录中按顺序查找可执行文件,而 hello
这个命令我们默认执行路径也就是PATH指定的路径,而不是当前路径。
解决方法:
- 指定当前路径,执行命令
./hello
- 临时修改 PATH 环境变量。将当前路径添加到 PATH 环境变量中,
expot PATH=$PATH:hello
- 永久修改 PATH 环境变量,通过修改 shell 配置文件,我们可以在配置文件
~/.bashrc
中添加下面这段代码
export PATH=$PATH:你的可执行文件所处路径
然后再执行 source ~/.bashrc
是配置文件生效
- 创建符号链接到已有的 PATH 目录。
ln -s /path/to/your/program/your_executable /usr/local/bin/your_executable
如果在 /usr/local/bin 中找到了符号链接 your_executable,操作系统会解析这个符号链接,找到它指向的实际文件 /path/to/your/program/your_executable,并运行该文件。
- 使用 alias 为程序创建一个简化的命令。
alias myprogram='/path/to/your/program/your_executable'
将上述命令添加到你的 shell 配置文件中(如 ~/.bashrc 或 ~/.zshrc),以永久生效。
环境变量相关命令
- export : 在全局环境变量表中设置一个全新的环境变量
- env : 显示所有环境变量
- unset : 清楚环境变量
- set : 显示本地定义的shell变量和环境变量
环境变量的组织方式
每个程序都有一个环境变量表,环境变量表是一个字符指针数组,每个指针指向一个以‘ \0 ’ 结尾的环境字符串
代码获取环境变量
- 命令⾏第三个参数
#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{int i = 0;for(; env[i]; i++){printf("%s\n", env[i]);}return 0;
}
- 通过 extern 第三方变量 environ 获取
#include <stdio.h>
int main(int argc, char *argv[])
{extern char **environ;int i = 0;for(; environ[i]; i++){printf("%s\n", environ[i]);}return 0;
}
通过系统调用获取
通过系统调用 getenv(name) 来获取环境变量,其实现我们可以通过 man 手册来查找(man getenv)
#include <stdio.h>
#include <stdlib.h>
int main()
{printf("%s\n", getenv("PATH"));return 0;
}
子进程继承环境变量
- 环境变量通常具有全局属性,可以被子进程继承下去。
代码演示
#include <stdio.h>
#include <stdlib.h>
int main()
{printf("%s\n", getenv("PATH"));return 0;
}
由我们在编译上面代码形成可执行程序,在运行时就会帮我们打印 PATH 环境变量可知,环境变量是会被子进程继承的(注意: 任何在命令行执行的可执行文件都是由 shell 进行 fork() 创建的子进程,在通过 进程切换 执行的命令,所以上面可进程就是 shell 的子进程)
程序地址空间
程序地址空间布局:
但上面的地址空间布局就是物理地址空间布局吗,答案是不是的。
我们可以通过一段程序验证
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int g_val = 0;
int main()
{pid_t id = fork();if(id < 0){perror("fork");return 0;}else if(id == 0){ //childprintf("child pid %d : %d : %p\n", getpid(), g_val, &g_val);}else{ //parentprintf("parent pid %d : %d : %p\n", getpid(), g_val, &g_val);}sleep(1);return 0;
}
输出结果:
parent pid 4635 : 0 : 0x56436823f014
child pid 4636 : 0 : 0x56436823f014
我们可以看见父子进程的 gval 的值是不一样的,但地址确实一样的,我们就可以得出一下结论:
- 我们看到的地址值绝对不是物理地址,而是虚拟地址,即我们在C/C++语言中看到的地址都是虚拟地址!而不是物理地址,物理地址用户是看不到的,统一由操作系统管理
- OS必须负责虚拟地址带物理地址的转换
进程地址空间
由上面可知 程序地址空间 的说法不准确,那应该为什么呢,准确来说应该为 进程地址空间
虚拟地址转换为物理地址
通过这个我们就可以看出,同一个变量地址相同,内容不同,其实是虚拟地址空间相同,但是物理内存上的地址其实是不同的。
也就是相当于操作系统给编译器画了一张大饼,告诉编译器这里的空间你全部可以用,但其是并不是全部可以用,你申请空间时 操作系统 就会看你申请的空间物理内存是否足够容纳的下,如果容纳不下,操作系统就不会帮你申请,直接打回你的申请,就像你兄弟告诉你我有100块,你说给我200块,你兄弟说不行一样
浅谈虚拟内存管理
那么既然有虚拟内存,那么操作系统就需要对虚拟内存管理,那操作系统是怎么对虚拟内存管理的呢?
和进程一样,也是先描述,再组织
描述
每一个进程都有一个 task_struct ,在 task_struct 中就有一个描述进程地址空间的结构体 mm_struct (内存描述符)
struct task_struct
{/*...*/struct mm_struct *mm; //对于普通的⽤⼾进程来说该字段指向他的//虚拟地址空间的⽤⼾空间部分,对于内核线程来说这部分为NULL。struct mm_struct *active_mm; // 该字段是内核线程使⽤的。当该进程是内核线程时,//它的mm字段为NULL,表⽰没有内存地址空间,可也并不是真正的没有,这是因为所有进程关//于内核的映射都是⼀样的,内核线程可以使⽤任意进程的地址空间。/*...*/
}
struct mm_struct
{/*...*/struct vm_area_struct *mmap;/* 指向虚拟区间(VMA)链表 */struct rb_root mm_rb;/* red_black树 */unsigned long task_size;/*具有该结构体的进程的虚拟地址空间的⼤⼩*//*...*/// 代码段、数据段、堆栈段、参数段及环境段的起始和结束地址。unsigned long start_code, end_code, start_data, end_data;unsigned long start_brk, brk, start_stack;unsigned long arg_start, arg_end, env_start, env_end;/*...*/
}
每一个进程都有独立的 mm_struct ,这样保证了进程之间的独立性。
组织
虚拟地址组织方式有两种:
- 当虚拟区较少时采取单链表,由 mmap 指针指向这个链表
- 当虚拟区间多时采取红黑树进行管理,由 mm_rb 指向这棵树
linux内核使用 vm_area_struct
结构来表示一个独立的虚拟内存区域(VMA),一个进程使用多个 vm_area_struct
来表示不同位置的虚拟内存区域。
struct vm_area_struct {unsigned long vm_start; //虚存区起始unsigned long vm_end;//虚存区结束struct vm_area_struct* vm_next, * vm_prev;//前后指针struct rb_node vm_rb;//红⿊树中的位置unsigned long rb_subtree_gap;struct mm_struct* vm_mm;//所属的 mm_structpgprot_t vm_page_prot;unsigned long vm_flags;//标志位struct {struct rb_node rb;unsigned long rb_subtree_last;} shared;struct list_head anon_vma_chain;struct anon_vma* anon_vma;const struct vm_operations_struct* vm_ops; //vma对应的实际操作unsigned long vm_pgoff;//⽂件映射偏移量struct file* vm_file;//映射的⽂件void* vm_private_data;//私有数据atomic_long_t swap_readahead_info;
#ifndef CONFIG_MMUstruct vm_region* vm_region;/* NOMMU mapping region */
#endif
#ifdef CONFIG_NUMAstruct mempolicy* vm_policy;/* NUMA policy for the VMA */
#endifstruct vm_userfaultfd_ctx vm_userfaultfd_ctx;
} __randomize_layout;
通过上面的描述,我们可以用图来表示以上结构:
为什么要有虚拟地址空间
- 安全风险,如果每个进程都可以访问任意内存空间,那么就意味着任意一个进程都能够读写系统先关的内存区域,如果是一个木马病毒,就意味着可以随意修改内存空间,导致很多不缺定因素
- 地址不确定,如果使用的是物理地址,每次运行的程序的地址是不确定的,因为每次运行的程序个数都不一样
- 效率低,如果直接使用物理内存的话,一个进程就是作为一个整体(内存块)操作的,如果出现内存不够用,就只能将不常用的进程拷贝到磁盘的交换分区中,等下次内存够了,在加载回来,如果是虚拟地址空间,就可以通过分页管理和页表映射分批加载进程,大大减小了内存的压力,使内存能够以更小的空间做更多的事
- 地址空间和页表都是OS来维护的,也就意味着想要使用地址空间和页表映射,就需要OS来监督,这也就保护了物理内存中的合法数据,包括各个进程以及内核的有效数据
- 由页表和地址空间的存在,也就意味着物理内存的分配和进程的管理没有关系了,进程管理模块和内存管理模块就完成了解耦
- 有了页表,程序在物理内存中理论上就可以在任意位置上加载。但它可以将地址空间上的虚拟地址空间和物理地址空间进程映射,所以在进程视角所有的内存分布都是有序的
相关文章:
【Linux】浅谈环境变量和进程地址空间
一、环境变量 基本概念 环境变量(Environment Variables)是操作系统提供的一种机制,用于存储和传递配置信息、系统参数、用户偏好设置等。 环境变量的作用 配置程序行为: 程序可以通过环境变量获取配置信息,例如日…...
vue数字公式篇(一)
一、使用插件来创造数字公式 因为只是展示和编辑 我看这个公式挺多,也对公式不太了解所以就这样,开始我的代码展示了 1、安装mathlive cnpm install mathlive2、页面 <template><div><label>输入 LaTeX 公式:</label><div …...
基于PMU的14节点、30节点电力系统状态估计MATLAB程序
“电气仔推送”获得资料(专享优惠) 程序简介: 程序采用三种方法对14节点和30节点电力系统状态进行评估: ①PMU同步向量测量单元结合加权最小二乘法(WLS)分析电力系统的电压幅值和相角状态; …...
5 分钟用满血 DeepSeek R1 搭建个人 AI 知识库(含本地部署)
最近很多朋友都在问:怎么本地部署 DeepSeek 搭建个人知识库。 老实说,如果你不是为了研究技术,或者确实需要保护涉密数据,我真不建议去折腾本地部署。 为什么呢? 目前 Ollama 从 1.5B 到 70B 都只是把 R1 的推理能力…...
QT QML实现音频波形图进度条,可点击定位或拖动进度
前言 本项目实现了使用QT QML创建一个音频波形图进度条的功能。用户可以在界面上看到音频波形图,并且可以点击进度条上的位置进行定位,也可以拖动进度条来调整播放进度。可以让用户更方便地控制音频的播放进度,并且通过音频波形图可以直观地…...
浅谈StarRocks SQL性能检查与调优
StarRocks性能受数据建模、查询设计及资源配置核心影响。分桶键选择直接决定数据分布与Shuffle效率,物化视图可预计算复杂逻辑。执行计划需关注分区裁剪、谓词下推及Join策略,避免全表扫描或数据倾斜。资源层面,需平衡并行度、内存限制与网络…...
味觉传送器E-Taste:开启虚拟世界的味觉之门
味觉传送器E-Taste:开启虚拟世界的味觉之门 一、发明背景与动机 随着虚拟现实(VR)和增强现实(AR)技术的飞速发展,人们在虚拟世界中的沉浸感不断提升,视觉和听觉体验已经取得了显著的突破。然而…...
ISE 14.7 IP核 Block Memory Generator 更换coe
ISE 14.7 IP核 Block Memory Generator 更换coe 打开XCO 后缀,修改下面的coe_file 目录,并且重新regenerate ip 核即可...
【Auto-Scroll-List 组件设计与实现分析】
Auto-Scroll-List 组件设计与实现分析 gitee代码仓库 https://gitee.com/chennaiyuan/dayup-record/tree/master/%E4%B8%80%E4%BA%9B%E7%BB%84%E4%BB%B6/auto-scroll-list 1. 组件概述 我们封装的 AutoScrollList 是一个自动滚动列表组件,主要用于展示需要自动循…...
用hexo初始化博客执行hexo init时碰到的问题
用hexo初始化博客执行hexo init时碰到的问题 $ hexo init myblog INFO Cloning hexo-starter https://github.com/hexojs/hexo-starter.git fatal: unable to access https://github.com/hexojs/hexo-starter.git/: SSL certificate problem: unable to get local issuer cer…...
【C++真题】P1739 表达式括号匹配
P1739 表达式括号匹配 题目描述 假设一个表达式有英文字母(小写)、运算符(、-、*、/)和左右小(圆)括号构成,以 作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配&#x…...
Java1.8与testNg兼容问题:bad class file和SocketTimeoutException: Read timed out
背景: 公司 java JDK默认用的是1.8版本,已经在跑的一个项目使用的testng用的是6.14.3,我拿到后通过Test 运行失败,因为这个是一直在用的项目,就没想到是版本兼容问题,折腾了好一阵(原开发者是通…...
高项第十二章——项目质量管理
项目质量管理包括把组织的质量政策应用于规划、管理、控制项目和产品质量要求,以满足干系人目标的各个过程。 项目质量管理针对的是项目过程中所涉及的活动 可交付成果质量管理针对的是项目生产的具体可交付成果,与可交付成果的性质和特性紧密相关 12…...
C# WPF编程-Menu
C# WPF编程-Menu 布局:代码:效果 在WPF(Windows Presentation Foundation)中,Menu控件用于创建下拉菜单或上下文菜单,它提供了丰富的定制选项来满足不同的应用需求。下面将介绍如何在WPF应用程序中使用Menu…...
python日期
导入包 from datetime import datetime现在时间 now datetime.now() print("当前时间:", now)当前时间: 2025-03-18 23:51:08.418953 格式化 formatted_now datetime.now().strftime("%Y-%m-%d %H:%M:%S") print("格式化后的时间:", forma…...
flutter 专题 一百零三
前不久,谷歌官方正式发布了Flutter的首个发布预览版(Release Preview 1),这标志着谷歌进入了Flutter正式版(1.0)发布前的最后阶段,同时作为Google的重量级跨平台开发方案,此次更新也…...
【conda activate无效】 conda: error: argument COMMAND: invalid choice: ‘activate‘
conda activate失效了 在使用conda activate时出现报错: usage: conda [-h] [-v] [--no-plugins] [-V] COMMAND ... conda: error: argument COMMAND: invalid choice: activate (choose from clean, compare, config, create, info, init, install, list, notice…...
Chainlit 自定义元素开发指南:使用 JSX 和受限导入实现交互式界面
自定义元素 Custom Element 类允许你渲染一个自定义的 .jsx 代码片段。.jsx 文件应当放置在 public/elements/ELEMEN_NAME.jsx 目录下。 属性 name 字符串 自定义元素的名称。它应该与你的JSX文件名相匹配(不包括 .jsx扩展名)。 props 字典 传递给 JSX 的属性。 display El…...
CEF 控制台添加一函数,枚举 注册的供前端使用的CPP交互函数有哪些
一、前序知识 1、设置单进程模式,方便调试 void ClientApp::OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr<CefCommandLine> command_line) {if (process_type.empty()){//cef 在debug模式下有问题#ifdef _DEBUGcommand_line->Appe…...
C++之list类及模拟实现
目录 list的介绍 list的模拟实现 定义节点 有关遍历的重载运算符 list的操作实现 (1)构造函数 (2)拷贝构造函数 (3)赋值运算符重载函数 (4)析构函数和clear成员函数 (5)尾…...
C++八大常见的设计模式的实现与实践指南
目录 创建型模式 单例模式工厂方法模式抽象工厂模式 结构型模式 适配器模式装饰者模式代理模式 行为型模式 观察者模式策略模式命令模式 高级主题 现代C特性影响模式性能对比典型应用案例 设计模式分类 一、创建型模式 1. 单例模式(Singleton) 现代…...
02 windows qt配置ffmpeg开发环境搭建
版本说明 首先我使用ffmpeg版本是4.2.1QT使用版本5.14.2我选择是c编译...
什么是状态管理?有何种方式可以实现?它们之间有什么区别?
目录 一、状态管理的核心概念 二、常见状态管理方案及对比 1. 基础方案:setState 2. 官方推荐:Provider 3. 事件驱动:Bloc (Business Logic Component) 4. 响应式增强:Riverpod 5. 轻量级全能库:GetX 三、方案对比与选型指南 四、实战建议 在 Flutter 中,状态管…...
tf1.x和tf2.x在使用上的区别和联系是什么
tf1.x和tf2.x在使用上的区别和联系是什么 TensorFlow 1.x 和 2.x 在使用上有显著差异,主要体现在编程范式、API 设计和易用性上,但二者仍共享相同的核心目标(深度学习框架)和底层计算引擎。以下是主要区别和联系: 主要…...
Elasticsearch使用记录
一、配环境 1.docker版本部署es 8.x系列可以关掉ssl(本地测试时),去docker的/usr/share/elasticsearch/config/elasticsearch.yml里面的“xpack.security.enabled:”设置成true就可以 2.window docker部署推荐教程:基于Docker安…...
【python web】一文掌握 Flask 的基础用法
文章目录 一、 Flask 介绍1.1 安装 Flask二、Flask的基本使用2.1 创建第一个 Flask 应用2.2 路由与视图函数2.3 请求与响应2.4 响应对象2.5 模板渲染2.6 模板继承2.7 静态文件管理2.8 Blueprint 蓝图2.9 错误处理三、Flask扩展与插件四、部署 Flask 应用五、总结Flask 是一个轻…...
第十六届蓝桥杯单片机组4T模拟赛二
难点: PCF8591同时测量两条通道数据 避免重复触发 采集触发时的时间数据存放 未采集的数据显示 清空数据 本题建议了解怎么去触发采集,怎么显示最近三次触发采集的时间即可。由于4T模拟赛的尿性有很多评测点是题目中没有要求的,另外测评的时候…...
《解锁华为黑科技:MindSpore+鸿蒙深度集成奥秘》
在数字化浪潮汹涌澎湃的当下,人工智能与操作系统的融合已成为推动科技发展的核心驱动力。华为作为科技领域的先锋,其AI开发框架MindSpore与鸿蒙系统的深度集成备受瞩目,开启了智能生态的新篇章。 华为MindSpore:AI框架的创新先锋…...
kotlin中的list set map整理
在 Kotlin 中,List、Set 和 Map 是三种核心集合类型,它们分别适用于不同的场景,具有独特的特性和操作方式。以下是它们的详细对比与使用指南: 1. List(列表) 核心特性 • 有序:元素按插入顺序…...
条款43:学习处理模板化基类内的名称
前提认知:模板类继承模板类,是需要建立在假设的前提下的,如果没有这个”假设“,编译将会失败 1.书上举例 2.完整代码举例 #include <iostream>class MsgInfo { };class BaseCompany { public:BaseCompany(){}~BaseCompan…...
五种方案实现双链路可靠数据传输
本文介绍五种双链路数据传输方案,目标是利用设备的多个传输通道,(如双有线网口,网口+wifi, 网口+5G等场景 , 网口+ 自组网, 自组网 + 5G等),将数据复制后分流、分路同时传输,以期提高数据传输可靠性,满足高可靠性传输的应用场景需求。部分方案给出了实际验证结果 。 …...
提升AI性能的秘密武器:量化、蒸馏与剪枝全面解析
通过高效的模型压缩技术推进 NLP 在快速发展的自然语言处理 (NLP) 领域,模型的大小和复杂性显著增加,从而显著提高了性能。然而,这些庞大模型的部署和维护也带来了挑战,特别是在计算成本、功耗和资源受限用户的可访问性方面。本博客深入探讨了量化、剪枝和蒸馏等尖端模型压…...
React Native 如何使用 Expo 快速开发?
React Native是当下热门的跨平台移动开发框架,而Expo则是它的重要开发工具之一。Expo提供了一套完整的开发环境,使开发者无需安装Android Studio或Xcode也能快速运行React Native项目。它包含了众多内置API,如相机、地理位置、推送通知等&…...
C++Primer 拷贝控制示例
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
Qt 读取数据库
在 Qt 中读取数据库文件通常涉及以下步骤。这里以 SQLite 为例(Qt 内置支持),其他数据库(如 MySQL、PostgreSQL)需要对应驱动: 1. 添加 SQL 模块依赖 在项目文件 .pro 中添加: QT sql2. 基本…...
DeepSeek在学术研究方向初期工作提示词分享
目录 论文选题 研读文献 拟定提纲 大家好这里是AIWritePaper官方账号!更多内容👉AIWritePaper~在如今这个学术圈的“快车道”上,时间就像是一场永不停歇的赛跑,而论文质量则是那颗我们拼命追逐的“金苹果”。最近一款名为DeepS…...
CentOS下安装ElasticSearch(日志分析)
准备目录 搞一个自己喜欢的目录 mkdir /usr/local/app 切换到该目录 cd /usr/local/app 下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz 选择其他版本 点击进入官网...
科技云报到:AI Agent打了个响指,商业齿轮加速转动
科技云报到原创。 3月16日,百度旗下文心大模型4.5和文心大模型X1正式发布。目前,两款模型已在文心一言官网上线,免费向用户开放。 同时,文心大模型4.5已上线百度智能云千帆大模型平台,企业用户和开发者登录即可调用AP…...
布谷直播系统源码开发实战:从架构设计到性能优化
作为山东布谷科技的一名技术研发人员,我参与了多个直播系统平台从0到1的开发和搭建,也见证了直播行业从萌芽到爆发的全过程。今天,我想从研发角度,分享一些直播系统软件开发的经验和心得,希望能对大家有所帮助。 一、 …...
pytorch小记(十):pytorch中torch.tril 和 torch.triu 详解
pytorch小记(十):pytorch中torch.tril 和 torch.triu 详解 PyTorch torch.tril 和 torch.triu 详解1. torch.tril(计算下三角矩阵)📌 作用🔍 语法🔹 参数📌 示例…...
C语言每日一练——day_11
引言 针对初学者,每日练习几个题,快速上手C语言。第十一天。(连续更新中) 采用在线OJ的形式 什么是在线OJ? 在线判题系统(英语:Online Judge,缩写OJ)是一种在编程竞赛中…...
HCIA-PPP实验
一、LCP链路控制协议 1、链路建立阶段:通过交互LCP报文协商参数,包含了MRU、认证类型、魔术字等。 2、链路维护阶段: 3、链路终止 二、NCP网络控制协议:交互PPP IPCP报文,检测地址、学习路由、下发地址 1、通过IPCP协议的请求消…...
C++学习之云盘项目nginx
1.复习 2.知识点概述 1. 一些基本概念 1.1 Nginx 初步认识 1.2 正向 / 反向代理 1.3 域名和 IP 2. Nginx 安装和配置 2.1 安装 2.2 配置 3. Nginx 的使用 3.1 部署静态网页 3.2 反向代理和负载均衡 课外知识导读 1. URL 和 URI 2. DNS 解析过程 1. 一些基…...
7-字符串
1-ASCII 0-9 对应 48-57 A-Z 对应 65-90 a-z 对应 97-122 2-字符数组 字符变量存储单个字符 字符数组存储多个字符 字符串就是字符数组加上结束符 ’ \0 ’ #include <iostream> using namespace std; int main(){//是字符数组,不是字符串char a1[]{C,,};…...
vue学习八
十七 组件通信方式 1 props 父传子 //父组件 <script setup>//book来源省略import Subview1 from ./Subview1.vue;function updatebook(updatetimes){book.value.updatetimes updatetimes} </script> <template><Subview1 :book"book" :upd…...
Vue 渲染 LaTeX 公式 Markdown 库
🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…...
基于大模型的喉癌全程预测与治疗方案优化研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与目标 1.3 研究方法与数据来源 二、大模型在喉癌预测中的应用原理 2.1 大模型概述 2.2 预测喉癌的技术原理 2.3 相关技术对比 三、术前预测与方案制定 3.1 术前风险预测 3.1.1 淋巴结转移预测 3.1.2 其他风险因素预…...
SpringBoot第三站:配置嵌入式服务器使用外置的Servlet容器
目录 1. 配置嵌入式服务器 1.1 如何定制和修改Servlet容器的相关配置 1.server.port8080 2. server.context-path/tx 3. server.tomcat.uri-encodingUTF-8 1.2 注册Servlet三大组件【Servlet,Filter,Listener】 1. servlet 2. filter 3. 监听器…...
通向AGI的未来之路!首篇2D/视频/3D/4D统一生成框架全景综述(港科大中山等)
文章链接: https://arxiv.org/pdf/2503.04641 摘要 理解并复现现实世界是人工通用智能(AGI)研究中的一个关键挑战。为实现这一目标,许多现有方法(例如世界模型)旨在捕捉支配物理世界的基本原理࿰…...
什么是MCP(Model Context Protocol)?对话、意图识别、服务调用和上下文管理
什么是MCP? MCP(Model Context Protocol) 是一种专为人工智能模型设计的通信协议,旨在解决复杂 AI 系统中多个模型或组件之间的协同、状态管理和资源优化问题。它尤其适用于大型语言模型(LLM)、多模态系统及…...