内存的四个区域

内存四个区域的介绍与使用方法

内存的四个区域

一:代码区 code

程序被操作系统加载到内存时,所有可执行的代码被加载到代码区,也叫代码段,
程序运行这段时间该区域数据不可被修改只可以被执行。


二:静态区     

                程序被加载到内存时就已经分配好,程序退出时才从内存中消失。

存储静态变量和全局变量。代码执行期间一直占用内存!

三:栈区     

                一种先进后出的存储结构,所有的自动变量(auto修饰的相当于局部变量),

                    函数的参数,函数的返回值都是栈区变量。不需要用户申请释放,编译器自动完成。



四:堆区  heap 

                  一个比较大的内存容器(比栈大),需要我们手动的申请和释放内存。

                堆区内存的使用函数:头文件#include <stdlib.h> 

                1:malloc 申请堆区内存。

void *  malloc(size_t  size);   

                                size为申请的内存的字节数。申请的空间随机不会初始化, 所以不知道内部值是多少。

        2:free  释放申请的内存。

  free(void *ptr);

                               只能释放你申请的内存,不然就会出错。

        3: calloc  申请堆区内存。

        void *calloc(size_t nmemb, size_t size); 

                         nmemb:指定单位的数量,size;单位的数量。

                    例子:malloc(10*sizeof(int));  ==  calloc(10,sizeof(int));
           区别:malloc申请的内存不负责初始化,而calloc申请的内存已经初始化为0.


                4:realloc   可以扩大之前申请的内存

                        void *realloc(void *ptr, size_t size);

                         ptr 要扩充的区域地址,size 扩充之后的大小。

                        例子:char *a=(char *)malloc(10*sizeof(char));//10个字节

        realloc(a,100);//增加为100个字节,也不会初始化。