进程的内存空间
2013-12-04 23:20
337 查看
1代码区/段:存储函数的代码,函数指针就是函数在代码区的地址(首地址)。
2全局区: 初始化的全局变量,static变量,读写都可以。
3 BSS区: 未初始化的全局区。BSS段在main()执行之前会自动清零。
4 堆区 : 也叫自由区,程序员全权掌控堆区。容易引发内存泄漏malloc(),free().
5 栈区 : 系统自动管理,函数的参数,局部变量(非static).
6 只读常量区:字符串""的字面值,const修饰的全局常量,在只读常量区。不能修改。有些资料把常量区和代码区放一起。
段错误:
1 使用了没有映射的虚拟地址,比如NULL
2 对内存执行了没有权限的操作,比如修改只读区。
char *s1 = "abc"; //s1在只读区
*s1 = 'e'; //修改只读区引发运行时段错误
2全局区: 初始化的全局变量,static变量,读写都可以。
3 BSS区: 未初始化的全局区。BSS段在main()执行之前会自动清零。
4 堆区 : 也叫自由区,程序员全权掌控堆区。容易引发内存泄漏malloc(),free().
5 栈区 : 系统自动管理,函数的参数,局部变量(非static).
6 只读常量区:字符串""的字面值,const修饰的全局常量,在只读常量区。不能修改。有些资料把常量区和代码区放一起。
#include<stdlib.h> int i1 = 1; //全局 int i2; //BSS static int i3 = 3;//全局 const int i4 = 4;//只读常量 static const int i44 = 44;//只读常量 void fa(int i5) //栈区 { int i6 = 6; //栈区 static int i7 = 7; //全局区 const int i8 = 8; //栈区,虽然为const,本质是可以读写 int* pi = malloc(4); //堆 char *s1 = "abc"; //s1在栈区,指向只读常量区 char s2[] = "abc"; //栈区开辟空间,s2为首地址 }
段错误:
1 使用了没有映射的虚拟地址,比如NULL
2 对内存执行了没有权限的操作,比如修改只读区。
char *s1 = "abc"; //s1在只读区
*s1 = 'e'; //修改只读区引发运行时段错误
相关文章推荐
- Castle.DynamicProxy Part 1: ClassProxy
- 读书笔记-重构-Form Template Method
- PLSQL程序编写杂烦数据表信息编写批量排版
- 安卓view.getMeasuredHeight()得到的高度单位以及dp和px的转换
- 电脑报2013年第3期
- 读书笔记-重构-Replace Method with Method Object(用对象代替方法)
- 解决Mysql错误:Can't create/write to file 'C:\WINDOWS\TEMP\#sql_1344_0.MYD' (Errcode: 17)
- PLSQL程序编写杂烦数据表信息编写批量排版
- PLSQL程序编写杂烦数据表信息编写批量排版
- GoAgent
- Tlist_Demo
- 3、solr的基本操作
- 在MEF中手动导入依赖的模块
- 刁的一B
- 库存事务处理现有量检查
- C# 特性(Attribute)详细介绍
- 读书笔记-重构-Replace Temp with Query
- flex stringValidator字符串验证
- 库存事务处理现有量检查
- 库存事务处理现有量检查