内存结构理解
来源:互联网 发布:linux libsensors.so 编辑:程序博客网 时间:2024/06/07 00:52
对于C语言的学习首先要搞清楚C程序在内存中的分布。
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;
- }
,
3,查看这个程序的进程信息:cat /proc/进程ID/maps
上图就是每个变量,函数在内存中地址。
黄色代表代码区
add为函数
main为函数
a3为const全局变量
绿色代表全局区
a1为全局变量
a2为全局静态变量
b2局部静态变量
蓝色代表堆区
p1为malloc动态分配空间的地址
紫色代表栈区
b1为自动变量(局部变量)
b3为const的局部变量
4,从以上分析中可以得出:
一个C语言程序在内存空间中分为4个基本部分
(1)代码区
(2)全局区
(3)堆
(4)栈
本文转载自:http://blog.csdn.net/gaoxin12345679/rss/list
0 0
- 内存结构理解
- 内存层次结构理解(一)
- 深入理解java虚拟机【Java内存结构】
- 深入理解JVM____JVM运行时内存结构
- 深入理解JVM之一:Java内存结构
- JVM体系结构-----深入理解内存结构
- 结构体定义、结构体指针、内存分配、指针、结构体形参的深入理解
- c语言中结构,动态分配内存的理解
- (语法)理解结构指针和动态分配内存
- java虚拟机内存结构----《深入理解java虚拟机》读书笔记
- 【深入理解java虚拟机 JVM】Java内存结构
- JVM学习框架及内存结构初略理解
- 深入理解java虚拟机-第一章:java虚拟机内存结构
- 深入理解JVM的内存结构及GC机制
- 对于内存结构的理解(应该能加深对汇编或者系统内核理解)
- 深入理解java虚拟机(一):java内存区域(内存结构划分)
- 《深入理解java虚拟机》Java内存结构及内存溢出实例
- 深入理解java虚拟机(一):java内存区域(内存结构划分)
- bitset实现(转)
- Java文件file操作总结
- linux内核设计与实现第三章
- linux查看发行版本
- 002_026 Python 从OpenOffice.org的文档中提取文本
- 内存结构理解
- html
- 黑马程序员_面向对象01
- Java编程基础之对象的容纳
- 施一公 谈英文论文写作
- 【Android学习】Android创建启动画面(1)
- d的小l
- C#之begininvoke和endinvoke
- Java之List排序出错