内存的四个区域
内存四个区域的介绍与使用方法
一:代码区 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个字节,也不会初始化。