堆内存管理

C语言中堆内存管理

C语言中并没有管理堆内存的语句,而是由标准库提供一套函数来进行管理。

函数有四种分别为malloc、calloc、relloc、free。用到的头文件为 stdlib,h。

malloc函数的用法

void * malloc (size_t size);

功能:向系统申请一块堆内存。

size:内存块的字节数

返回值:成功返回内存首地址,失败返回NULL。

注意:使用malloc分配的堆内存空间是没有初始化的,要想初始化可使用以下函数。

1.函数的头文件为strings.h

void * bzero (void * s ,size_t n);

功能:把一块内存的所有字节赋值为0

s: 内存的首地址

n:内存块的字节数

如果不想赋值为0可以使用memset

void * memset(void s ,int c ,size_t n);

功能:把一块内存的所有字节赋值为c

s:内存的首地址

c:要赋值的数据,范围0-255

n:内存块的字节数

注意:当首次使用malloc向系统申请内存时,为了提升效率会一下子分配33页内存给malloc管理,之后再使用malloc时会直接从这33页内存中进行分配而不会再向系统去申请。

void * free(void * ptr);

功能:释放内存

1.可以释放空指针

2.不可以重复释放

3.只释放使用权,不会清理释放的内存

注意:系统对堆内存的管理决定了是否会产生段错误,malloc和free只是在管理用户的使用权限。

void * calloc(size_t nmemb , size_t size);

功能:向系统申请多块相同字节数的堆内存,并把每个字节数初始化0

nmemb:要申请的块数

size:每一块的字节数

所以calloc函数执行速度比calloc要慢,而且calloc函数底层调用了malloc函数,而且函数中两个参数互换不影响最后结果。

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

功能:调整分配的堆内存的大小,可以调大也可以调小

ptr:申请到的内存块的首地址

size:最终内存块的字节数

返回值:调整后的内存块的首地址,如果在原来那块内存上无法实现,它会重新申请一块size大小的内存,并把原来的释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值