存储器分配

2014-07-31 08:50:42   最后更新: 2014-07-31 18:00:08   访问数量:749




void *malloc(size_t size);

 

定义于stdlib.h头文件中

分配指定字节的存储区,不对存储区进行初始化,所以存储区中内容是不确定的

 

void *calloc(size_t n, size_t size);

 

定义于stdlib.h头文件中

分配n个size大小的连续内存,并全部用0初始化

 

void *realloc(void *ptr, size_t num_bytes);

 

定义于stdlib.h头文件中

更改已分配存储区大小,对于新增存储区,不初始化

如果ptr为NULL,则与malloc完全等效

 

void free(void *ptr);

 

定义于stdlib.h头文件中

释放已分配的存储区

 

由于三个分配内存函数都是返回void *类型值,所以我们不需要对结果进行强制类型转换

通常这些函数都是用sbrk系统调用实现的

 

void * alloca(size_t size);

 

alloca是一个特殊的存储区分配函数,用于替代malloc,并不是ISO C的一部分

他的优点是会在栈空间中动态开辟空间,而不是在堆中,这样,每当函数调用结束,空间会被自动释放,因此不会造成内存泄漏,但是他的缺点是栈帧的长度,很多系统中是不允许函数在被调用后增加栈帧长度的,但是在linux、BSD、mac、solaris四个UNIX主流平台中都提供了这个函数

 






读书笔记      技术帖      linux      unix      c语言      龙潭书斋      apue      unix环境高级编程      内存      memory      存储器      存储     


京ICP备15018585号