我的印象是Objective-C中的alloc
(当我们调用[anyObject alloc]
时,它实际上是在实现C函数malloc
,内存被分配到堆中,但在任何地方都找不到答案。
此外,在搜索alloc
时,我发现了在堆栈中分配内存的alloca
。如果我没有错的话,alloc
会在堆中分配内存来创建对象。
那么,alloc
和malloc
(以及alloca
(之间有什么区别呢?谁能概括一下吗?
alloc()
不是标准的C库函数。一些较旧的编译器和库包含<alloc.h>
库,该库提供一些内存分配函数,但这不是标准的。Microsoft Visual C++运行时包含一个Alloc()
函数,它与malloc()
有些相似,但这也不是C标准的一部分。
malloc()
在进程堆上分配内存。使用malloc()
分配的内存将保留在堆上,直到使用free()
释放为止。
alloca()
在当前函数的堆栈帧内分配内存。当当前函数返回时,使用alloca()
分配的内存将从堆栈中删除。alloca()
仅限于小的分配。
alloca()
合适的情况很少。在几乎所有情况下,都应该使用malloc()
来分配内存。
alloc
函数用于分配长度为heap
的大小为字节的区域或块。
malloc
函数用于分配heap
存储。它的名称代表内存分配。
我不记得C++Primer一书中的逐字逐句,但函数之间有很大的区别。例如,C++中的new分配内存,但它也将数据构造到内存中。std::分配器分配内存,但不调用任何构造函数。这些C函数也是如此。分配而不构造。分配和构造。