您的位置:首页 > 其它

进程的内存空间

2013-12-04 23:20 337 查看
1代码区/段:存储函数的代码,函数指针就是函数在代码区的地址(首地址)。

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'; //修改只读区引发运行时段错误
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: