Linux C 内存管理方式之半动态

看到半动态申请内存,第一反应这是什么鬼?

实际上半动态内存申请很容易理解,在GNU C中使用alloca函数来实现

#include <stdlib.h>

void *alloca (size_t size)

alloca函数可以像malloc一样动态申请内存(注意所申请的内存位置在调用函数的栈里面,页因此在调用函数结束后自动释放)

好处是显而易见的:既可以自由得申请空间,又不需要手动释放内存。

坏处是:发生错误时,无法得到一个清晰得错误消息。还有就是,非GNU系统不支持alloca,这是一个BSD扩展,兼容性不好。(其他平台可能会使用C写一个模拟得alloca,但效率不好)

在GNU C中得大部分情况下,你可以使用可变大小的数组代替alloca。

区别:可变大小的数组只在数组名所在的区域有效,超过则释放。alloca 申请的空间则一直保留的函数结束。

alloca可以在循环体中使用,每次循环都逐步增加内存空间。而可变大小的数组不行。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e1d87b0df2674e562b82ff152385ef70.html