alloc、malloc 和 alloca — 有什么区别?
alloc, malloc, and alloca — What's the difference?
我的印象是 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()
分配的内存将在当前函数 returns 时从堆栈中删除。 alloca()
仅限于小额分配。
alloca()
适合的情况很少见。几乎在所有情况下,您都应该使用 malloc()
来分配内存。
alloc
函数用于分配 heap
.
长度为 size 字节的区域或块
malloc
函数用于分配heap
存储空间。它的名字代表内存分配。
我不记得 C++ Primer 一书中的逐字说明,但函数之间存在重大差异。例如 C++ 中的 new 分配内存,但它也将数据构造到内存中。 std::allocator 分配内存,但不调用任何构造函数。这些 C 函数也是如此。一个分配但不构造。一分配构造。
我的印象是 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()
分配的内存将在当前函数 returns 时从堆栈中删除。 alloca()
仅限于小额分配。
alloca()
适合的情况很少见。几乎在所有情况下,您都应该使用 malloc()
来分配内存。
alloc
函数用于分配 heap
.
malloc
函数用于分配heap
存储空间。它的名字代表内存分配。
我不记得 C++ Primer 一书中的逐字说明,但函数之间存在重大差异。例如 C++ 中的 new 分配内存,但它也将数据构造到内存中。 std::allocator 分配内存,但不调用任何构造函数。这些 C 函数也是如此。一个分配但不构造。一分配构造。