/*高地址
*
* 栈 局部变量(向下增长)
* 堆 动态申请内存(向上增长)
* bss 未初始话全局变量(初始化为0)
*
* data 只读数据段 (已始化全局变量,静态变量,常量)
* code 只读代码段
*低地址
* */#include
#include
/*常量*/
const int ca = 10 ;//全局常量 data区
static sa;//静态,data区
int a;//全局未初始化 bss 区
int b = 4;//全局初始化 data区
/*常量*/
const int ca = 10 ;//全局常量 data区
void func1(); //子函数,代码区
void func2();//子函数,代码区
int main(void)
{
/*申请一块内存 堆*/
int *p = NULL;//栈
p = (int *)malloc(sizeof(int));
*p = 5;
char *p1 = "hello world";//data区
char p2[] = "hello world";//栈区
/*局部变量*/
int aa;
/*栈区*/
printf("***********栈区************\n");
printf("局部变量:%p\n",&aa);
aa = 5;
printf("局部变量:%p\n",aa);
printf("p2:%p\n",p2);
printf("\n\n");
/*堆区*/
printf("*********堆区**************:\n");
printf("动态内存区:%p\n",&p);
printf("动态内存区:%p\n",p);
/*非初始化数据段*/
printf("\n\n");
printf("*********bss 区************:\n");
printf("非初始化全局变量:%p\n",&a);
printf("\n\n");
/*只读区*/
printf("********only read 只读区********\n");
printf("data 段:\n");
printf("全局初始化变量:%p\n",&b);
printf("p1:%p\n",p1);
printf("常量:%p\n",&ca);
printf("静态变量:%p\n",&sa);
printf("\n\n");
printf("代码段:\nmain地址:%p\n",main);
printf("子函数2:%p\n",func2);
printf("子函数1:%p\n",func1);
}
void func1()
{
printf("子函数\n");
}
void func2()
{
printf("子函数\n");
}
结果:***********栈区************
局部变量:0xbfca4bb8
局部变量:0x5
p2:0xbfca4bbc
*********堆区**************:
动态内存区:0xbfca4bc8
动态内存区:0x9c34008
*********bss 区************:
非初始化全局变量:0x8049a00
********only read 只读区********
data 段:
全局初始化变量:0x80499f0
p1:0x80486e8
常量:0x80486e4
静态变量:0x80499fc
代码段:
main地址:0x8048424
子函数2:0x804860a
子函数1:0x80485f6