alloc、malloc 和 alloca — 有什么区别?

alloc, malloc, and alloca — What's the difference?

我的印象是 Objective-C 中的 alloc(当我们调用 [anyObject alloc] 实际上是在实现 C 函数 malloc 并且内存在堆中分配,但是在任何地方都找不到这个问题的答案。

此外,在搜索 alloc 时,我发现 alloca 在堆栈中分配内存。如果我没记错的话,alloc 在堆中分配内存来创建对象。

那么,allocmalloc(以及 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 函数也是如此。一个分配但不构造。一分配构造。