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

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

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

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

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

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

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

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

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

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