当前位置: 首页 > news >正文

认识linux进程内存布局以及与命令行参数和环境变量的关系

1. 思考

  • 如下是 main函数 的原型,思考一个问题,我们通过命令行传递的参数,main函数 是如何获得的?环境变量 main函数又是如何获取的。

    /* 基础形式(无参数) */
    int main(void);
    /* 标准形式(可以获取命令行参数) */
    int main(int argc, char *argv[]);
    /* 扩展形式形式(可以获取命令行参数和环境变量),此形式是非标准的扩展​(C 标准未强制要求),但主流平台(Linux、Windows、macOS)普遍支持 */
    int main(int argc, char *argv[], char *envp[]);
    
  • 上述问题在理解了linux进程创建的基本流程,以及linux进程的内存布局,相信就能做到心中有数

2. linux进程内存布局

  • 在创建一个进程时通过fork() 完全将父进程复制一份,然后通过execve() 将要执行的任务加载到进程空间,进程空间的大致布局如下所示。
    在这里插入图片描述

  • .text .rodata .data .bss stack heap 是可执行文件的代码段和数据段以及堆栈空间,在此便不过多赘述

  • mmap段则为进程提供了一下灵活的机制,一般用来存放动态链接库,或者使用系统调用mmap() 创建内存映射时便是使用这部分空间,在本文中暂不展开。

  • 环境变量&命令行参数 是在进程运行前由execve()复制进来的,实时上除了mmap段动态加载的内容,其余部分都是进程运行前由execve() 复制进来的。

  • 通过cat /proc/self/maps可以查看当前进程内存布局在这里插入图片描述

3. 进程如何获取命令行参数和环境变量

  • 至此,其实已经很清晰了,环境变量和命令行参数都是系统调用execve() 在加载进程时复制到进程空间的,main函数只需到对应的位置去取即可,如下是execve() 的原型,
    /* Replace the current process, executing PATH with arguments ARGV and
    environment ENVP.  ARGV and ENVP are terminated by NULL pointers.  */
    extern int execve (const char *__path, char *const __argv[],char *const __envp[]) __THROW __nonnull ((1, 2));
    
http://www.dtcms.com/a/294871.html

相关文章:

  • java 位运算转换 bit operator convert
  • WTL 桌面开发入门
  • Medical | 批次 批号 批准文号
  • 直接偏好优化(DPO):原理、演进与大模型对齐新范式
  • git查看两个commit之间有哪些Pull Request
  • 【盘古100Pro+开发板实验例程】FPGA学习 | Modelsim 的使用和 do 文件编写
  • 如何通过内网穿透,访问公司内部服务器?
  • 企业选择将服务器放在IDC机房托管的优势
  • Python 程序设计讲义(7):Python 的基本数据类型——整数类型
  • 什么是HTTP长连接、短连接?谁更能抗DoS攻击?
  • Vue 中 :value 和 :value.sync 的区别
  • La Création du C++ : Une Épopée dans l‘Évolution de la Programmation
  • Encore.ts:下一代高性能 TypeScript 后端框架的崛起
  • 后仿之 SDF优先级和相关概念
  • Kubernetes 服务发布进阶
  • 大模型开发
  • 图的BFS和DFS
  • 优化 Elasticsearch JVM 参数配置指南
  • 网安-SQL注入-sqli-labs
  • 前端Web性能核心指标全解析与优化实战指南
  • Mermaid流程图
  • netstat -tunlp | grep的作用
  • day 33打卡
  • 位运算在算法竞赛中的应用(基于C++语言)_位运算优化
  • SAP亚太区借力Business AI加速云转型,第二季度客户扩展势头强劲
  • 【Lucene】leafreadercontext逻辑段与segment物理磁盘段的关系
  • 牛油果褐变的成因与食用安全
  • 天津大学陈亚楠教授团队 ACS AEM:焦耳热超快合成非平衡态能源材料——毫秒级制备与跨体系性能突破
  • 本地运行C++版StableDiffusion!开源应用StableVerce发布
  • GTSuite许可问题解决方法