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

标签 c memory memory-management malloc alloca

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

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

那么,allocmalloc(以及 alloc)有什么区别呢?谁能总结一下?

最佳答案

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

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

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

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

关于c - alloc、malloc 和 alloca — 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32685851/

相关文章:

linux - 从 U-boot shell 模式写入 NVRAM

c - 如何在C中转换从串口传入的十六进制值?

c - 文件和字符串

c - 在 c (linux) : How to change packet headers 中发送 ipv6 jumbograms

c++ - 不使用 malloc 是否有可能造成内存泄漏?

c - 函数调用时的堆栈存储

c - C语言编程中的二分法

java - 在 "Out Of Memory"之后在哪里可以找到堆转储

c++ - 调用对象的析构函数是否等同于在对象上调用delete?

c - 有没有什么办法可以在小端电脑上以大端模式编译和运行程序?