C语言——内存分配

Serializable和Parcelable的区别

为什么要使用动态分配内存

当你声明数组时,你必须使用一个编译时常量指定数组的长度,但是,数组的长度通常在运行时才知道,这是由于他的内存空间取决于输入数据。但是如果程序需要使用的元素数量超过了声明的长度,就必须要通过执行动态分配内存。

malloc

当一个程序需要另外的内存时,它就调用malloc函数,malloc从内存池中提取一块合适的内存,并向该程序返回一个指向该内存的指针。这块内存并没有以任何方式进行初始化,如果对这块内存初始化非常重要,你需要自己进行初始化。一般使用memset()进行初始化,void *memset(void *buffer, int c, int count) buffer:为指针或是数组, c:是赋给buffer的值,count:是buffer的长度
malloc的参数是需要分配内存的字节数,malloc分配的是一块连续的内存,如果操作系统无法向malloc提供更多的内存,malloc就返回NULL。

void *malloc(size_t size)

calloc

void *calloc(size_t num_elements,size_t elements_size);

calloc也用于分配内存。与malloc的主要区别是calloc在返回指向内存指针之前把他初始化为0.这个初始化常常能带来方便,但是如果你的程序只是想把一些值存储在数组,那么这个初始化过程就是浪费时间;另一个区别是,他们请求内存的方式不同,calloc的参数包括所需元素的数量以及每个元素的字节数

realloc

void realloc(void *ptr,size_t new _size);

realloc用于修改一个已经分配的内存块的大小,你可以使一块内存扩大或缩小。如果用于扩大一块内存,那么这块内存原先的数据没有变化,新增的内存添加到原先的内存块后面,新内存并没有以任何方法进行初始化。如果用于缩小,该内存块尾部的部分内存便被拿掉。如果原先的内存块无法改变大小,realloc将会分配另一块正确大小的内存,并把原先那块内存的内容复制到这块内存上。如果realloc函数的第一个参数是NULL,那么它的行为就会和malloc一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值