码迷,mamicode.com
首页 > 其他好文 > 详细

内存分区

时间:2020-02-10 22:28:46      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:管理   定义   nbsp   释放   分配   自动   str   存储   回收   

c语言有五大内存分区,分别是栈,堆,全局区,常量区,代码区。

代码区

程序被操作系统加载到内存的时候,所有的可执行代码都加载到代码区,也叫代码段,这块内存是不可以在运行期间修改的。

代码区中所有的内容在程序加载到内存的时候就确定了,运行期间不可以修改,只可以执行。

常量区

常量在系统一运行被创建,常量区的内存是只读的,如常量字符串就放在这个区。你可以读他们,但是不可以修改他们,内存由系统管理。

静态区/全局区

定义在函数外边的全局变量和静态变量就放在这个这里,这里的变量在程序已启动就被创建,你可以自由的更改他们,所以是由系统管理的可读可写的内存。

静态区/全局区是程序加载到内存的时候就确定了,程序退出的时候从内存消失。所有的全局变量和静态变量在程序运行期间都占用内存。

栈区

在需要的时候由编译器(系统)自动分配,在不需要的时候会由系统自动回收的存储区,内存由系统管理,函数中定义的变量存储在栈中,当调用函数的时候函数中定义的变量会被加到栈中,当函数离开的时候,被添加的变量会从栈中移除,栈在最高的地址上,所以添加的变量地址会逐渐变小,里面的内容可读可写。

堆区

是一块动态内存,由程序猿自己申请自己释放的内存空间,其内存由程序猿自己管理,当程序运行时候动态分配给变量,它可以长时间存在,所以,申请一个堆内存就必须有释放的过程,同时指向堆内存的指针不能改变,否则这个堆内存永远都得不到释放,除非程序崩溃或者运行结束导致系统回收程序所在的内存,这样就很容易造成内存泄漏(是指程序运行期间,程序结束后程序所占用的内存就释放了),它是可读可写的。
 
 

内存分区

标签:管理   定义   nbsp   释放   分配   自动   str   存储   回收   

原文地址:https://www.cnblogs.com/xumaomao/p/12292778.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!