alloc,malloc和alloca - 有什么区别?

问题描述 投票:16回答:3

我的印象是在Objective-C中的alloc(当我们调用[anyObject alloc]实际上是实现C函数malloc并且内存在堆中分配,但无法找到答案。

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

那么,allocmalloc(和alloca)有什么区别?任何人都可以总结一下吗?

c memory memory-management malloc alloca
3个回答
30
投票

alloc()不是标准的C库函数。一些较旧的编译器和库包含一个<alloc.h>库,它提供了一些内存分配函数,但这不是标准的。 Microsoft Visual C ++运行时包含Alloc()函数,它有点类似于malloc(),但这也不是C标准的一部分。

malloc()在进程堆上分配内存。使用malloc()分配的内存将保留在堆上,直到使用free()释放它。

alloca()在当前函数的堆栈帧中分配内存。当前函数返回时,使用alloca()分配的内存将从堆栈中删除。 alloca()仅限于小额拨款。

alloca()适合的情况很少见。在几乎所有情况下,您都应该使用malloc()来分配内存。


1
投票

alloc函数用于在heap的长度上分配大小字节的区域或块。

malloc函数用于分配heap存储。它的名字代表内存分配。


0
投票

我不记得C ++ Primer一书中的逐字陈述,但这些函数之间存在重大差异。例如,C ++中的new分配内存,但它也将数据构造到内存中。 std :: allocator分配内存,但不调用任何构造函数。这些C函数也是如此。一个分配但不构建。一个分配和构建。

© www.soinside.com 2019 - 2024. All rights reserved.