操作系统进程映像
创始人
2024-11-12 20:08:26
0

进程映像

程序与进程:
  • 程序是存储在磁盘上的可执行文件,当程序被运行时,系统会把程序从磁盘加载到内存中运行,正在运行中的程序称为进程,一个程序可以同时被加载多次,形成多个进程,每个进程相互独立,由操作系统管理

什么是进程映像:
  • 进程在内存空间中的分布使用情况就称为进程映像,从低地址到高地址分别是:

各个内存段的存储什么数据:
  • 代码段(text)

    • 存储二进制指令、字面值常量、被const修饰过的原data段的数据

    • 权限r-- 或者 r-x 权限只读

  • 数据段(data)

    • 存储初始化过的全局变量和静态变量

  • 静态数据段(BSS)

    • 存储未初始化过的全局变量和静态变量

    • 进程一旦加载,此内存段会被操作系统自动清零,默认值是0

    • 如果初始化的值给0,依然还在BSS

  • 堆区(heap)

    • 要程序员动态分配、动态释放,从低地址向高地址扩招

    • 使用malloc系列函数进行内存管理

    • 而malloc系列函数底层调用操作系统的API(brk\sbrk\mmap\munmap)

  • 栈区(stack)

    • 存储非静态局部变量、块变量,包括函数的参数(除了main函数的参数)、返回值

    • 内存扩展从高地址向低地址扩展

    • 栈区与堆区中间有一段预留空间,一个作用为了预留,第二个是让共享库的内存以及共享内存使用此段内存

  • 命令行参数与环境变量表

    • 里面存储环境变量表以及命令行传给main的参数内容

//  打印出每个内存段中各种数据的地址 //  通过ps -aux 查看出进程id //  /proc/进程号/maps 该文件能查看该进程的内存分布情况 //  通过打印的内存地址,分析maps文件的内存段分布情况 #include  #include  ​ const int const_global = 10;    //  常全局变量 int init_global = 10;   //  初始化全局变量 int uninit_global;      //  未初始化全局变量 ​ int main(int argc,const char* argv[]) {     const static int const_static = 10; //  常静态局部变量     static int init_static = 10;//  初始化静态局部变量     static int uninit_static;   //  未初始化静态局部变量 ​     const int const_local;  //  常局部变量     int prev_local;     //  前局部变量     int next_local;     //  后局部变量                                                                                                                                                                                                    int arr[10]; ​     int* prev_heap = malloc(sizeof(int));   //  前堆变量     int* next_heap = malloc(sizeof(int));   //  后堆变量 ​     const char* literal = "literal";    //  字面值常量     extern char** environ;      //  环境变量 ​     printf("-----命令行参数与环境变量-----<高>\n");     printf("环境变量:%p\n",environ);     printf("命令行参数:%p\n",argv);     printf("-------------栈-------------------\n");     printf("常局部变量:%p\n",&const_local);     printf("前局部变量:%p\n",&prev_local);     printf("后局部变量:%p\n",&next_local);     printf("arr[0]:%p arr[1]:%p arr[2]:%p\n",&arr[0],&arr[1],&arr[2]);     printf("-------------堆-------------------\n");     printf("后堆变量:%p\n",next_heap);     printf("前堆变量:%p\n",prev_heap);     printf("-----------BSS--------------------\n");     printf("未初始化全局变量:%p\n",&uninit_global);     printf("未初始化静态变量:%p\n",&uninit_static);     printf("----------data--------------------\n");     printf("初始化全局变量:%p\n",&init_global);     printf("初始化静态变量:%p\n",&init_static);     printf("---------代码段-------------------\n");     printf("常静态局部变量:%p\n",&const_static);     printf("常全局变量:%p\n",&const_global);     printf("字面值常量:%p\n",literal);     printf("二进制指令:%p\n",main);     printf("------------------------------<低>\n"); ​     getchar(); }

相关内容

热门资讯

指南书辅助!雀友会广东潮汕麻将... 指南书辅助!雀友会广东潮汕麻将辅助软件(辅助挂)都是存在有辅助器(有挂秘籍)1、起透看视 雀友会广东...
步骤辅助!天天开心国王辅助(辅... 步骤辅助!天天开心国王辅助(辅助挂)都是存在有辅助插件(有挂详情)所有人都在同一条线上,像星星一样排...
大纲辅助!九九山城万州版脚本(... 大纲辅助!九九山城万州版脚本(辅助挂)总是是真的有辅助方法(有挂规律)1、玩家可以在九九山城万州版脚...
阶段辅助!超级三加一辅助工具安... 阶段辅助!超级三加一辅助工具安装(辅助挂)总是确实有辅助app(有挂透明挂)小薇(辅助器软件下载)致...
妙招辅助!花花生活圈怎么装开挂... 妙招辅助!花花生活圈怎么装开挂(辅助挂)切实存在有辅助插件(今日头条)一、花花生活圈怎么装开挂游戏安...
演示辅助!微信小程序哥哥打大a... 演示辅助!微信小程序哥哥打大a辅助器(辅助挂)好像存在有辅助脚本(讲解有挂)1、很好的工具软件,可以...
教程书辅助!微信小程序功夫川码... 教程书辅助!微信小程序功夫川码辅助(辅助挂)好像是有辅助脚本(有挂技巧)1、这是跨平台的微信小程序功...
策略辅助!老友麻将有没有挂(辅... 策略辅助!老友麻将有没有挂(辅助挂)真是真的是有辅助器(的确有挂)1、老友麻将有没有挂免费脚本咨询教...
要领辅助!福建十三时辅助(辅助... 要领辅助!福建十三时辅助(辅助挂)好像真的是有辅助器(有挂解惑)1、福建十三时辅助破解器简单,福建十...
诀窍辅助!雀神山庄麻将辅助器(... 诀窍辅助!雀神山庄麻将辅助器(辅助挂)果然是有辅助工具(有人有挂)在进入雀神山庄麻将辅助器软件靠谱后...