简单总结下这两个函数的本质区别,具体的使用方法可去参考资料做进一步研究。
相同点
都是动态分配
,根据实际运行情况动态分配的内存,而非一开始就分配返回类型相同
,都是返回的内存起始地址内存连续
,一次调用后,分配的内存都是逻辑连续的调用相同
,输入参数都是申请内存的byte数
不同点
内存分区不同
,malloc分配的是堆区内存,需要手动free;alloca分配的是栈区内存,程序自动释放;(注意,栈空间有限仅几kb左右,堆空间远大于栈空间)作用域不同
,malloc分配的内存全局可用(类似全局变量),alloca分配的内存仅当前函数可用(类似局部变量)可移植性不同
,malloc是C标准库函数<stdlib.h>里的,可移植通用;alloca在"malloc.h"里,不具有可移植性,一般禁用
补充
alloca()
: Allocation,分配一个连续栈内存malloc()
: Memory Allocation,分配一个连续堆内存calloc()
:Clear Allocation,与malloc的最大区别就是分配后的内存默认初始化清零realloc()
:Reset Allocation,给已分配的堆内存重新调整大小