C编译器怎么样对内存划分和使用

C编译器怎么样对内存划分和使用,第1张

C编译器怎么样对内存划分和使用,第2张

一、C编译器对内存的划分空
这里,编译器将内存分为四个区域,分别是堆栈区、堆区、全局/静态区和常量区。如果想划分得更细,还可以添加一个免费存储区;全局区被看作两部分,初始化的全局区和未初始化的全局区。

二、在内存中保存程序中不同的量
int a = 0;//a:全局初始化区
char * P1;//全局未初始化区域
main()
{
int b;//stack
char s[]= " ABC ";//stack
char * p2;//stack
char * P3 = " 123456 ";//“123456”在常量区,p3在堆栈上。
static int c = 0;//全局(静态)初始化区域

P1 =(char *)malloc(10);
p2 =(char *)malloc(20);//10和20字节的分配区在堆区。

//123456放在常量区,编译器可能会用p3指向的“123456”进行优化。
strcpy(p1," 123456 ");
}

第三,不同记忆区域空的使用有什么特点?
申诉程序已经给出了程序中出现的金额,以及如何分储空房。说明如下:
1。堆栈-由编译器自动分配和释放。如果我们定义了一个变量,编译器负责分配空并回收它。
2。堆——一般由程序员通过函数(malloc/free等)来分配和释放。).如果程序员不释放它,程序可能会在程序结束时被OS回收。
3。全局区(静态区)——全局变量和静态变量存储在一起,初始化的全局变量和静态变量在一个区域,未初始化的全局变量和未初始化的静态变量在另一个相邻区域。类似地,release由编译器分配,但是release必须等到程序结束
4。常量存储区——编译器负责管理,程序结束后释放程序
。也就是说,在C语言中,我们实际上使用的是堆、栈和全局区,它们可以改变值,而真正可以由我们自由分配和释放的操作都是在堆区完成的。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C编译器怎么样对内存划分和使用

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情