设为首页 加入收藏

TOP

C语言深度解析1-内存结构
2014-11-23 19:55:45 来源: 作者: 【 】 浏览:15
Tags:语言 深度 解析 内存 结构

对于C语言的学习首先要搞清楚C程序在内存中的分布。

提到内存大家都会头疼,我也不例外。但是为了根治这个疑难杂症,痛定思痛,纠结再纠结,蛋疼再蛋疼……

在查看了很多资料,终于对内存这东西有了进一步了的了解……

以下就是我的学习记录……如有错误请指正,大牛勿喷……文明看帖,努力回帖,共同进步……

废话不多说 Let‘s go……

1,在ceontos系统终端中

\

#include 
  
   
#include 
   
     #include 
    
      int add(int a, int b) { return (a+b); } int a1 = 1; static int a2 = 11; const int a3 = 111; int main() { printf("pid:%p\n", getpid());//输出当前程序的进程ID int b1 = 2; static int b2 = 22; const int b3 = 222; int* p = malloc(sizeof(int)); //以下输出变量和函数的地址 printf("a1:%p\n", &a1); printf("a2:%p\n", &a2); printf("a3:%p\n", &a3); printf("b1:%p\n", &b1); printf("b2:%p\n", &b2); printf("b3:%p\n", &b3); printf("p:%p\n", p); printf("add:%p\n", add); printf("main:%p\n", main); while(1); //使这个函数一直运行 //在linux下,cd /proc/进程ID/ 目录下,cat maps文件 //此文件为此程序变量,函数映射到内存中信息 //当程序返回时,进程ID这个目录就会自动删除,为查看maps文件中的信息 //所以要确保程序不返回 return 0; }
    
   
  
2,编译add.c文件,并运行

\,< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+M6Ossum/tNXiuPazzNDytcS9+LPM0MXPoqO6Y2F0IC9wcm9jL734s8xJRC9tYXBzPC9wPgo8cD48aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/45/1_wvikv__.jpg" alt="">


上图就是每个变量,函数在内存中地址。

黄色代表代码区

add为函数

main为函数

a3为const全局变量


绿色代表全局区

a1为全局变量

a2为全局静态变量

b2局部静态变量


蓝色代表堆区

p1为malloc动态分配空间的地址


紫色代表栈区

b1为自动变量(局部变量)

b3为const的局部变量


4,从以上分析中可以得出:

一个C语言程序在内存空间中分为4个基本部分

(1)代码区

(2)全局区

(3)堆

(4)栈




】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言 enum 枚举 注意要点 下一篇2014川大复试c语言

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: