您的位置:首页 > 其它

浅析存储管理函数

2016-04-04 20:15 232 查看
   很多像我一样的C语言学习者在学到内存管理函数的时候都会充满疑惑。杂杂的函数分不清楚,今天小编整理一下,方便大家,也希望大家指正,一起交流。

  C语言标准库中,提供了一组用于动态管理内存的函数,这些函数定义在allo.h头文件里。使用它们时需要增加#include<alloc.h>命令。下面介绍这些函数的用法和注意事项。

 1. calloc函数

  原型:  void * calloc (size_t  num1, size_t  num2);

  功能:分配num1个大小为num2字节的内存单元。若成功分配,则返回所分配的内存单元的首字节的指针;否则,返回NULL;

  例子:

       int * pstr=(int *)calloc(200, sizeof(int));

2.malloc函数

原型:  void * malloc (size_t size);

功能:分配大小为size的内存空间,若分配成功,则返回所分配内存单元的第一个字节的指针;若分配失败,则返回NULL。

例子:

         int * p= (int *)malloc( sizeof (int) );

3.修改内存单元大小的函数realloc

原型: void * realloc (void * p , size_t size);

功能:将p所指向的内存单元的大小,变化到size个字节。若变动成功,则返回新内存单元的第一个内存单元的指针;若变动失败,则返回NULL。

例子:

      char *p =(char*)malloc(sizeof(char));

      p=(char *) realloc (p, 100*sizeof(char));

4.free函数

原型:  void free (void * block) ;

功能:释放指定存储空间;

例子: 

         int *p=malloc(100);

         free (p)

下面写几点备注:

1.在有的编译器里,这些内存管理函数是被包含在stdlib.h这个头文件里的。

2.类型转换 (【数据类型】 * p)将函数返回的地址转换成某数据类型的指针。之所以可能会对这些内存管理函数的返回值做转换是因为这些函数返回的是一个void类型的指针,写成void *。类型void *的指针可以指向任意类型的数据,然而不能取消对void指针的引用,因为它指向未具体说明的对象。不过许多优化的编译器会自动把这些函数返回的地址转换成赋值语句左边的指针类型。不过,加上显式类型转换指令是无害的。

3.关于realloc函数的进一步说明,详见文章《realloc和堆、栈的几点说明》

本文部分参考了《C语言与程序设计》(王瑞民、卢红星等)、《C语言入门经典》(Ivor Horton著)两书,特此致谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: