1.malloc()
(1)函数原型
void *malloc(unsigned int num_bytes);
(2)功能
请求系统动态分配num_bytes个字节的空间,如果分配成功则返回第一个字节的地址,并且可以进行强制类型转换,告诉系统分配空间中存储的是那种类型的数据。否则返回空指
针NULL。
(3)当内存不在使用时,要用使用free函数将内存释放。
2.ralloc
(1)函数原型
void *ralloc(void *mem_address,unsigned int newsize);
(2)功能
先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够, 先按照newsize指定的大小分配空间,将原有
数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。即
重新分配存储器块的地址。
如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。
(3)同样的当内存不在使用时,要用使用free函数将内存释放。
(4)使用ralloc函数的注意事项
(1)ralloc失败的时候,返回NULL。
(2)ralloc失败的时候,原来的内存不改变,不会释放也不会移动。
(3)假如原来的内存后面还有足够多剩余内存的话,ralloc的内存=原来的内存+剩余内存,ralloc还是返回原来内存的地址;假如原来的内存后面没有足够多剩余内存的话,ralloc
将申请新的内存,然后把原来的内存数据拷贝到新内存里,原来的内存将被free掉,ralloc返回新内存的地址。
(4)如果size为0,效果等同于free()。
(5)传递给ralloc的指针必须是先前通过malloc(), calloc(),或ralloc()分配的
(6)传递给ralloc的指针可以为空,等同于malloc。
3.calloc
(1)函数原型
void *calloc(size_t n, size_t size);
(2)功能
在内存的动态分配区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。
4.区别:
malloc不能初始化所分配的内存空间,而函数calloc能。如果malloc函数分配的内存空间原来没有被使用过,则其中的
每一位可能都是0;反之,如果这部分内存曾经被分配过,则其中可能遗留各种各样的数据,也就是说,使用malloc函
数的程序开始时(内存还没有被重新分配)能正常进行,但经过一段时间(内存已经被重新分配,可能会出现一
些问题)。
ralloc可以对给定的指针所指向的空间进行扩大或缩小,无论是扩大还是缩小,原有的内存中的内容将保持不变,当
然,对于缩小,则被缩小的那一部分的内容将会丢失,ralloc并不保持调整后的内存空间和原来的 内存空间保持同一
内存地址,ralloc返回的指针很可能指向新的地址。
calloc会将所分配的空间中的每一位都初始化为零,也就是说如果你是字符类型或整数类型的元素分配内存,那么这
些元素将保证会被动的初始化为0,如果你为指针类型的元素分配内存,那么这些元素通常会被初始化为空指针。如
果你为实型元素分配内存,则这些元素会被初始化为浮点型的0。