Process Image
现在我们已经了解了如何获取流程及其父流程的基本信息,现在是时候查看流程/程序信息的细节了。
过程图像究竟是什么? 过程映像是执行程序时所需的可执行文件。 此图像通常包含以下部分 -
- 代码段或文本段
- 数据段
- 堆栈段
- 堆段
以下是过程图像的图形表示。
Code segment是目标文件或程序的虚拟地址空间的一部分,由可执行指令组成。 这通常是只读数据段,具有固定大小。
数据段有两种类型。
- Initialized
- Un-initialized
Initialized data segment是目标文件或程序的虚拟地址空间的一部分,由初始化的静态和全局变量组成。
Un-initialized data segment是目标文件或程序的虚拟地址空间的一部分,由未初始化的静态和全局变量组成。 未初始化的数据段也称为BSS(符号开始的块)段。
Data segment是读写的,因为变量的值可以在运行时更改。 该细分市场也有固定的规模。
Stack segment是为自动变量和函数参数分配的内存区域。 它还在执行函数调用时存储返回地址。 堆栈使用LIFO(后进先出)机制来存储本地或自动变量,函数参数以及存储下一个地址或返回地址。 返回地址是指完成函数执行后返回的地址。 根据局部变量,函数参数和函数调用,此段大小是可变的。 该段从较高地址增长到较低地址。
Heap segment是为动态内存存储分配的内存区域,例如malloc()和calloc()调用。 此段大小也根据用户分配而变化。 该段从较低地址增长到较高地址。
现在让我们检查段(数据和bss段)大小如何随一些示例程序而变化。 通过执行命令“size”可以知道段大小。
初始计划
File: segment_size1.c
#include<stdio.h>
int main() {
printf("Hello World\n");
return 0;
}
在以下程序中,添加了一个未初始化的静态变量。 这意味着未初始化的段(BSS)大小将增加4个字节。 Note - 在Linux操作系统中,int的大小为4个字节。 整数数据类型的大小取决于编译器和操作系统支持。
File: segment_size2.c
#include<stdio.h>
int main() {
static int mystaticint1;
printf("Hello World\n");
return 0;
}
在以下程序中,添加了初始化的静态变量。 这意味着初始化段(DATA)大小将增加4个字节。
File: segment_size3.c
#include<stdio.h>
int main() {
static int mystaticint1;
static int mystaticint2 = 100;
printf("Hello World\n");
return 0;
}
在以下程序中,添加了初始化的全局变量。 这意味着初始化段(DATA)大小将增加4个字节。
File: 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个字节。
File: 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;
}
执行步骤 (Execution Steps)
编译 (Compilation)
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
Execution/Output
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