我们先来看一段代码及其运行结果
#include <stdio.h>
#include <stdlib.h>
int global_uninit_var;
int global_init_var1=520;
int global_init_var2=666;
void func()
{
;
}
int main()
{
int local_var1;
int local_var2;
static int static_uninit_var;
static int static_init_var=456;
char *str1="I am a 666~~~";
char *str2="You are right!!!";
int *malloc_var=(int *)malloc(sizeof(int));
printf("addr of func: %p\n",func);
printf("addr of str1: %p\n",str1);
printf("addr of str2: %p\n",str2);
printf("addr of global_init_var1: %p\n",&global_init_var1);
printf("addr of global_init_var2: %p\n",&global_init_var2);
printf("addr of static_init_var: %p\n",&static_init_var);
printf("addr of static_uninit_var: %p\n",&static_uninit_var);
printf("addr of global_uninit_var: %p\n",&global_uninit_var);
printf("addr of malloc_var: %p\n",malloc_var);
printf("addr of local_var1: %p\n",&local_var1);
printf("addr of local_var2: %p\n",&local_var2);
return 0;
}
运行结果:
lhy@ubuntu:~/xiaojiayu$ gcc p39-1.c
lhy@ubuntu:~/xiaojiayu$
lhy@ubuntu:~/xiaojiayu$
lhy@ubuntu:~/xiaojiayu$ ./a.out
addr of func: 0x56215a1286fa
addr of str1: 0x56215a1288e8
addr of str2: 0x56215a1288f6
addr of global_init_var1: 0x56215a329010
addr of global_init_var2: 0x56215a329014
addr of static_init_var: 0x56215a329018
addr of static_uninit_var: 0x56215a329020
addr of global_uninit_var: 0x56215a329024
addr of malloc_var: 0x56215b61b260
addr of local_var1: 0x7ffdf9521468
addr of local_var2: 0x7ffdf952146c
由运行结果看出打印出来的地址逐渐增大。
观察下面的图片:
可以看到改变不同的程序,对应的段的大小会改变。