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一样