天天看點

linux c程式記憶體分布

詳細參見: csdn:http://blog.csdn.net/chenyiming_1990/article/details/9476181

           開源中國:http://my.oschina.net/pollybl1255/blog/140323

 #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

linux c程式記憶體分布
linux c程式記憶體分布
linux c程式記憶體分布
linux c程式記憶體分布

轉載于:https://blog.51cto.com/wonderwander/1623779