【前言】
我又来更新了!
今天讲的是内存管理
一切前提:#include<stdlib.h>或者#include<cstdlib>
【malloc函数】
函数原型:
[C] 纯文本查看 复制代码 void *malloc(unsigned int size);
作用:在内存中分配一块大小为size(字节数)的内存空间
返回值:指向的内存(错误为NULL)
这通常要使用sizeof()关键字,这里讲解一下
sizeof()关键字的使用方法如下:
[C] 纯文本查看 复制代码 sizeof(114514); //常量114514占4字节
sizeof(int); //int类型占4字节
sizeof(long); //long类型占8字节
使用示例:
[C] 纯文本查看 复制代码 int *pHomo; //(bushi
pHomo = (int *)malloc(sizeof(int));
*pHomo = 114514;
printf("pHomo = %d",*pHomo);
//这个程序有个大问题,一会儿会讲
【calloc函数】
函数原型:
[C] 纯文本查看 复制代码 void *calloc(unsigned n,unsigned size);
作用:在内存中连续分配n个大小为size的内存空间
返回值:指向的一串内存(错误为NULL)
使用示例:
[C] 纯文本查看 复制代码 int *pHomoArr;
pHomoArr = (int *)calloc(114,sizeof(int));
//同样,这个程序也有问题
【realloc函数】
函数原型:
[C] 纯文本查看 复制代码 void *realloc(void *ptr,size_t size);
返回值:指向的内存(错误为NULL)
作用:将ptr处的内存大小改为size大小
使用示例:
[C] 纯文本查看 复制代码 int *pIntHomo;
long *pLong;
pIntHomo = (int *)malloc(sizeof(int));
pLong = realloc(pIntHomo,sizeof(long));
//还是有问题。。。
【free函数】
前面的程序都有问题!
为哈呢?
因为,所有内存都以堆的形式储存
使用完后,没有及时释放
所以,需要free函数
函数原型:
[C] 纯文本查看 复制代码 void free(void *ptr);
作用:释放ptr处的内存
这玩意有啥用?
小程序可以不用,但是在实际开发中
如果连续分配114514次1MB的内存,及时释放,仅需1mb内存
如果不释放,需要114514MB的内存!
学会了吗?
|