linux c程序内存分布
/*高地址
*
* 栈 局部变量(向下增长)
* 堆 动态申请内存(向上增长)
* bss 未初始话全局变量(初始化为0)
*
* data 只读数据段 (已始化全局变量,静态变量,常量)
* code 只读代码段
*低地址
* */
#include <stdlib.h> #include <stdio.h> /*常量*/ 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
附上图片,转载自:http://my.oschina.net/pollybl1255/blog/140323
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。