C语言深度解析1-内存结构
2014-03-16 00:05
260 查看
对于C语言的学习首先要搞清楚C程序在内存中的分布。
提到内存大家都会头疼,我也不例外。但是为了根治这个疑难杂症,痛定思痛,纠结再纠结,蛋疼再蛋疼……
在查看了很多资料,终于对内存这东西有了进一步了的了解……
以下就是我的学习记录……如有错误请指正,大牛勿喷……文明看帖,努力回帖,共同进步……
废话不多说 Let‘s go……
1,在ceontos系统终端中
,
3,查看这个程序的进程信息:cat /proc/进程ID/maps
上图就是每个变量,函数在内存中地址。
黄色代表代码区
add为函数
main为函数
a3为const全局变量
绿色代表全局区
a1为全局变量
a2为全局静态变量
b2局部静态变量
蓝色代表堆区
p1为malloc动态分配空间的地址
紫色代表栈区
b1为自动变量(局部变量)
b3为const的局部变量
4,从以上分析中可以得出:
一个C语言程序在内存空间中分为4个基本部分
(1)代码区
(2)全局区
(3)堆
(4)栈
提到内存大家都会头疼,我也不例外。但是为了根治这个疑难杂症,痛定思痛,纠结再纠结,蛋疼再蛋疼……
在查看了很多资料,终于对内存这东西有了进一步了的了解……
以下就是我的学习记录……如有错误请指正,大牛勿喷……文明看帖,努力回帖,共同进步……
废话不多说 Let‘s go……
1,在ceontos系统终端中
#include <stdio.h> #include <stdlib.h> #include <unistd.h> 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文件,并运行
,
3,查看这个程序的进程信息:cat /proc/进程ID/maps
上图就是每个变量,函数在内存中地址。
黄色代表代码区
add为函数
main为函数
a3为const全局变量
绿色代表全局区
a1为全局变量
a2为全局静态变量
b2局部静态变量
蓝色代表堆区
p1为malloc动态分配空间的地址
紫色代表栈区
b1为自动变量(局部变量)
b3为const的局部变量
4,从以上分析中可以得出:
一个C语言程序在内存空间中分为4个基本部分
(1)代码区
(2)全局区
(3)堆
(4)栈
相关文章推荐
- java内存分配和String类型的深度解析
- c语言代码运行时的内存分布结构
- 图解JVM内存结构及内存/栈溢出原因解析
- java内存分配和String类型的深度解析
- Kafka源码深度解析-序列13 -Server核心组件之2(续)- TimingWheel本质与DelayedOperationPurgatory核心结构
- 深度解析Java内存的原型
- C语言中数据类型的本质含义是:表示一个内存格子的长度和解析方法
- oracle 内存结构 share pool sql解析的过程
- Java内存分配和String类型的深度解析
- 3、C语言深度学习笔记--计算机体系结构简介
- C语言 数据结构之二叉树 数据结构实验之二叉树八:(中序后序)求二叉树的深度
- Java内存分配和String类型的深度解析
- C语言 内存分配 地址 指针 数组 参数 实例解析
- jvm - 内存结构以其解析
- 深度解析Java中volatile的内存语义实现以及运用场景
- 深度解析Java内存原型
- 深度解析Java内存的原型及工作原理
- C语言深度剖析学习笔记-指针、数组、内存、函数
- C语言笔记--float和double在内存中的结构
- 深度解析java内存的原型