原文链接:http://blog.csdn.net/fish43237/article/details/42632305
功能上的区别:
(1)malloc
申请指定字节数的内存。申请到的内存中的初始值不确定。
(2)calloc
为指定长度的对象,分配能容纳其指定个数的内存。申请到的内存的每一位(bit)都初始化为0
(3)realloc
更改以前分配的内存长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定
(4)alloca
在栈上申请内存。
用法和注意
(1)malloc
分配指定字节数的存储区。此存储区中的初始值不确定
(2)calloc
为指定长度的对象,分配能容纳其指定个数的存储空间。该空间中的每一位(bit)都初始化为0
(3)realloc
更改以前分配区的长度(增加或减少)。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,而新增区域内的初始值则不确定
(4)alloca
因为在栈上申请的内存,所以程序在出栈的时候,会自动释放内存。但是需要注意的是,alloca不具可移植性, 而且在没有传统堆栈的机器上很难实现。alloca不宜使用在必须广泛移植的程序中,。C99中支持变长数组(VLA), 可以用来替代alloca()。