一个存储在硬盘里的可执行程序包括:①.bss段 ②.data段 ③.rodata段 ④.text段,是一个静态的机器代码文件;当可执行程序载入内存后, 系统会为这个程序分配堆栈资源,形成一个动态的进程。
test:
#include <stdio.h>
#include <stdlib.h>
//.bss段
int bss1; //未手动初始化的全局变量
static int bss2; //未手动初始化的静态全局变量
//.data段
int data1 = 10; //手动初始化的全局变量
//.text段
void func(void)
{
printf("hello\n");
}
int main(int argc, char const *argv[])
{
//栈区
int stack;
//堆区
int *heap = (int *)malloc(sizeof(int));
//.bss段
static int bss3; //未手动初始化的静态局部变量
//.data段
static int data2 = 10; //初始化了的静态局部变量
//.rodata段
char *rodata = "hello";
printf("stack:\t%p\n", &stack);
printf("heap: \t%p\n", heap);
printf("bss1: \t%p\n", &bss1);
printf("bss2: \t%p\n", &bss2);
printf("bss3: \t%p\n", &bss3);
printf("data1: \t%p\n", &data1);
printf("data2: \t%p\n", &data2);
printf("rodata: \t%p\n", rodata);
printf("text: \t%p\n", func);
return 0;
}