alloc,malloc和alloca – 有什么区别?
我的印象是Objective-C中的alloc
(当我们调用[anyObject alloc]
实际上是在实现C函数malloc
并且内存在堆中分配,但无法找到答案)。
此外,在搜索alloc
,我发现alloca
在堆栈中分配内存。 如果我没有错, alloc
在堆中分配内存来创建对象。
那么, alloc
和malloc
(和alloca
)有什么区别? 任何人都可以总结一下吗?
alloc()
不是标准的C库函数。 一些较旧的编译器和库包含一个
库,它提供了一些内存分配函数,但这不是标准的。 Microsoft Visual C ++运行时包含一个Alloc()
函数,它有点类似于malloc()
,但这也不是C标准的一部分。
malloc()
在进程堆上分配内存。 使用malloc()
分配的malloc()
将保留在堆上,直到使用free()
释放它。
alloca()
在当前函数的堆栈帧中分配内存。 当前函数返回时,使用alloca()
分配的内存将从堆栈中删除。 alloca()
仅限于小分配。
alloca()
适当的情况很少见。 在几乎所有情况下,都应该使用malloc()
来分配内存。
alloc
函数用于在heap
长度上分配大小字节的区域或块。
malloc
函数用于分配heap
存储。 它的名字代表内存分配。