c++内存分配函数之间的区别
上一篇 /
下一篇 2012-06-29 13:45:30
/ 个人分类:C++
malloca/alloca:
51Testing软件测试网
iSjMl"R 内存分配函数,与malloc,calloc,realloc类似。但是注意一个重要的区别,_alloca是在栈(stack)上申请空间,用完马上就释放。51Testing软件测试网K?fF#b
51Testing软件测试网]7?u;F]R f alloca包含在头文件malloc.h中,在某些系统中会宏定义成_alloca使用。51Testing软件测试网:B,h/m%R#N
51Testing软件测试网-vM6J0zO
H*_
p 注意:51Testing软件测试网 S'X6b%G*k/[
:e*S!F`7yH Y1W0 1)在调用 alloca的函数返回的时候, 它分配的内存会自动释放。也就是说, 用 alloca 分配的内存在栈上。所以释放不需要用户使用free。
U)\"v
HPi0
51Testing软件测试网HC3EH5v
Y 2)alloca不具可移植性,而且在没有传统堆栈的机器上很难实现。当它的返回值直接传入另一个函数时会带来问题,因为他分配在栈上.
L[b,ci X K:{0
%y3S5Q1^9@'b] Ic0 总结:由于这些原因,alloca不宜使用在必须广泛移植的程序中, 不管它可能多么有用。51Testing软件测试网 ~;Kh L:xb@*S}
51Testing软件测试网)z
r!_
qB3@_8g
o realloc:51Testing软件测试网Bp d#x7a9]@)J
-R @ d#Y`*]Q0 重新分配内存并返回void类型,如果没有足够的内存扩展内存块,则原来的指向的内存指针无变化,并返回NULL;如果重新分配大小设为0,而释放原来的内存块, 并返回NULL。
5i9g)o5W5wu0
eylsW6uA0 calloc:51Testing软件测试网mG:d!KWn
.RY] D#? y7d2j0 分配指定数目的元素,每个元素的大小由size指定, 并将其初始化为0,calloc调用malloc使用C++ _set_new_mode函数来设置新的处理方式,默认情况下,malloc 失败时不调用分配内存的处理程序例程。
pr4jDh3hJT9@0
51Testing软件测试网RD!cMa*I malloc:51Testing软件测试网0Z[G0?Fr