c语言 - alloc、malloc 和 alloca — 有什么区别?



我的印象是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()分配的内存将从堆栈中删除。alloca()仅限于小的分配。

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

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

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

我不记得C++Primer一书中的逐字逐句,但函数之间有很大的区别。例如,C++中的new分配内存,但它也将数据构造到内存中。std::分配器分配内存,但不调用任何构造函数。这些C函数也是如此。分配而不构造。分配和构造。

相关内容

  • 没有找到相关文章

最新更新