Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的alloca函数_C_Alloca - Fatal编程技术网

C语言中的alloca函数

C语言中的alloca函数,c,alloca,C,Alloca,我在修改C时遇到了alloca/free函数,它被描述为在堆栈式空间上分配存储。这和malloc/free一样吗?或者这是不一样的?谢谢。我想你的意思是alloca,用于在堆栈上分配内存。是的,这与堆上分配的malloc和free不同 不要试图释放使用alloca分配的内存,因为调用alloca的函数返回其调用者时,它会自动释放 使用alloca和/或C99可变长度数组可能是一件危险的事情,因为如果不小心使用这些工具,很容易使堆栈溢出。malloc,calloc和realloc函数在堆上分配空间

我在修改C时遇到了alloca/free函数,它被描述为在堆栈式空间上分配存储。这和malloc/free一样吗?或者这是不一样的?谢谢。

我想你的意思是
alloca
,用于在堆栈上分配内存。是的,这与堆上分配的
malloc
free
不同

不要试图释放使用
alloca
分配的内存,因为调用
alloca
的函数返回其调用者时,它会自动释放


使用
alloca
和/或C99可变长度数组可能是一件危险的事情,因为如果不小心使用这些工具,很容易使堆栈溢出。

malloc
calloc
realloc
函数在堆上分配空间


free
函数“释放”以前由这些函数分配的空间。

在旧答案中添加一些额外信息

malloc()

  • 动态内存分配
  • 作用域(在函数调用之间需要内存时)
  • 但是,
    malloc()
    增加的一项额外工作是我们必须显式地
    free()
    分配的内存


    因此,为了只使用动态内存分配功能,并避免
    free()
    的开销,可以在程序中使用
    alloca()
    。这是可能的,因为当使用
    alloca()
    时,内存在堆栈上分配(如其他答案所述)。

    以下链接表明
    alloc
    是一个不同的函数:我认为你是对的。我认为这是一个分配器的示例实现..你在修改K&R吗?你一定很聪明。我知道它“有点”过时了,但我不知道还有什么其他资源可以指导我完成基本知识。有什么建议吗?第三段怎么强调都不够。几乎没有安全的方法来使用alloca或VLAs。@NickA我希望Haris做到了。无论如何我都把它修好了。