开发手册 欢迎您!
软件开发者资料库

过程图像

过程间通信过程映像 - 从基本概念到高级概念,从简单和简单的步骤学习过程间通信,包括概述,过程信息,过程映像,过程创建和终止,子过程监控,过程组,会话和作业控制,过程资源,其他进程,覆盖进程映像,相关系统调用(系统V),系统V和Posix,管道,命名管道,共享内存,消息队列,信号量,信号,内存映射。

现在我们已经了解了如何获取流程及其父流程的基本信息,现在是时候查看流程/程序信息的细节了.

究竟是什么过程图片?过程映像是执行程序时所需的可执行文件.此图片通常包含以下部分 :

  • 代码段或文本段

  • 数据段

  • 堆栈段

  • 堆段

以下是图示过程映像.

过程图像

代码段是目标文件或程序的虚拟地址空间的一部分,由可执行指令组成.这通常是只读数据段,并且具有固定大小.

数据段有两种类型.

  • 已初始化

  • 未初始化

初始化数据段是目标文件或程序的虚拟地址空间的一部分,由初始化的静态和全局变量组成.

未初始化的数据段是目标文件的一部分或程序的虚拟地址空间,包含未初始化的静态和全局变量.未初始化的数据段也称为BSS(符号开始符号)段.

数据段是读写的,因为变量的值可以更改在运行时间.此段也具有固定大小.

堆栈段是为自动变量和函数参数分配的内存区域.它还在执行函数调用时存储返回地址. Stack使用LIFO(后进先出)机制来存储本地或自动变量,函数参数以及存储下一个地址或返回地址.返回地址是指完成函数执行后返回的地址.根据局部变量,函数参数和函数调用,此段大小是可变的.此段从较高地址增长到较低地址.

堆段是为动态内存存储分配的内存区域,例如malloc()和calloc( )电话.该段大小也根据用户分配而变化.这个细分市场从较低的地址增长到较高的地址.

现在让我们检查细分(数据和bss细分)的大小如何随一些示例程序而变化.通过执行命令"size"已知段大小.

初始程序

文件:segment_size1.c

#includeint main() {   printf("Hello World\n");   return 0;}

在以下程序中,添加了一个未初始化的静态变量.这意味着未初始化的段(BSS)大小将增加4个字节. 注意 : 在Linux操作系统中,int的大小是4个字节.整数数据类型的大小取决于编译器和操作系统支持.

文件:segment_size2.c

#includeint main() {   static int mystaticint1;   printf("Hello World\n");   return 0;}

在以下程序中,添加了初始化的静态变量.这意味着初始化段(DATA)大小将增加4个字节.

文件:segment_size3.c

#includeint main() {   static int mystaticint1;   static int mystaticint2 = 100;   printf("Hello World\n");   return 0;}

在以下程序中,添加了初始化的全局变量.这意味着初始化段(DATA)大小将增加4个字节.

文件:segment_size4.c

#includeint myglobalint1 = 500;int main() {   static int mystaticint1;   static int mystaticint2 = 100;   printf("Hello World\n");   return 0;}

在以下程序中,添加了一个未初始化的全局变量.这意味着未初始化的段(BSS)大小将增加4个字节.

文件:segment_size5.c

#includeint myglobalint1 = 500;int myglobalint2;int main() {   static int mystaticint1;   static int mystaticint2 = 100;   printf("Hello World\n");   return 0;}

执行步骤

编译

  babukrishnam $ gcc segment_size1.c -o segment_size1  babukrishnam $ gcc segment_size2.c -o segment_size2  babukrishnam $ gcc segment_size3.c -o segment_size3  babukrishnam $ gcc segment_size4.c -o segment_size4  babukrishnam $ gcc segment_size5.c -o segment_size5

执行/输出

  babukrishnam size segment_size1 segment_size2 segment_size3 segment_size4 segment_size5  text data bss dec hex filename  878 252 8 1138 472 segment_size1  878 252 12 1142 476 segment_size2  878 256 12 1146 47a segment_size3  878 260 12 1150 47e segment_size4  878 260 16 1154 482 segment_size5  babukrishnam