过程图像
现在我们已经了解了如何获取进程及其父进程的基本信息,现在是时候研究进程/程序信息的详细信息了。
过程映像到底是什么?进程映像是执行程序时所需的可执行文件。该图像通常包含以下部分 -
- 代码段或文本段
- 数据段
- 堆栈段
- 堆段
以下是过程图像的图示。
代码段是目标文件或程序的虚拟地址空间的一部分,由可执行指令组成。这通常是只读数据段并且具有固定大小。
数据段有两种类型。
- 已初始化
- 未初始化
初始化数据段是目标文件或程序虚拟地址空间的一部分,由初始化的静态变量和全局变量组成。
未初始化的数据段是目标文件或程序的虚拟地址空间的一部分,由未初始化的静态变量和全局变量组成。未初始化的数据段也称为BSS(Block Started by Symbol)段。
数据段是可读写的,因为变量的值可以在运行时更改。该段也有固定的大小。
堆栈段是分配给自动变量和函数参数的内存区域。它还在执行函数调用时存储返回地址。堆栈采用LIFO(后进先出)机制来存储局部或自动变量、函数参数以及存储下一个地址或返回地址。返回地址是指函数执行完成后要返回的地址。该段大小根据局部变量、函数参数和函数调用而变化。该段从高地址向低地址增长。
堆段是分配给动态内存存储(例如 malloc() 和 calloc() 调用)的内存区域。该段大小也根据用户分配而变化。该段从低地址向高地址增长。
现在让我们检查几个示例程序的段(数据段和 bss 段)大小如何变化。通过执行命令“size”即可获知段大小。
初始计划
文件:segment_size1.c
#include<stdio.h> int main() { printf("Hello World\n"); return 0; }
在下面的程序中,添加了一个未初始化的静态变量。这意味着未初始化段 (BSS) 大小将增加 4 个字节。注- 在 Linux 操作系统中,int 的大小为 4 个字节。整数数据类型的大小取决于编译器和操作系统的支持。
文件:segment_size2.c
#include<stdio.h> int main() { static int mystaticint1; printf("Hello World\n"); return 0; }
在下面的程序中,添加了一个已初始化的静态变量。这意味着初始化段 (DATA) 大小将增加 4 个字节。
文件:segment_size3.c
#include<stdio.h> int main() { static int mystaticint1; static int mystaticint2 = 100; printf("Hello World\n"); return 0; }
在下面的程序中,添加了一个已初始化的全局变量。这意味着初始化段 (DATA) 大小将增加 4 个字节。
文件:segment_size4.c
#include<stdio.h> int myglobalint1 = 500; int main() { static int mystaticint1; static int mystaticint2 = 100; printf("Hello World\n"); return 0; }
在下面的程序中,添加了一个未初始化的全局变量。这意味着未初始化段 (BSS) 大小将增加 4 个字节。
文件:segment_size5.c
#include<stdio.h> int 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