首页 > 代码库 > 第十二章 分配内存: malloc ()与free () 及calloc()

第十二章 分配内存: malloc ()与free () 及calloc()



malloc () :


      它接受一个参数,即所需内存字节数。如果成功,则返回该空间首地址,该空间没有初始化,如果失败,则返回NULL

,(但是找到的内存是匿名的)

(分配类型 *)malloc(分配元素个数 *sizeof(分配类型))

例子:

double * ptb;

ptb = (double * ) malloc (30 * sizeof (double ));

这段代码请求30个 double类型值的空间,并且把ptb指向该空间所在位置,注意ptb是作为一指向一个double类型值的指针声明,而不是指向30个double类型值的数据块的指针。中30可以是一个变量。用于在c90不能用可变长数组时,即可用这种方法

free ():

     因为用malloc找到的内存空间是不能自动释放,所以在调用完malloc后还要用到一个释放内存空间的函数,以防止内存泄漏

calloc():

     它与malloc函数类似,但是calloc函数接受两个参数,分别为第一个为所需内存大小,第二个为每个单元比字节计大小 。它还有一个特性是把找到的内存块的全部位都置为0.同时也可用free函数释放分配的内存。

存储类型与动态内存分配联系:

   从理想模型认为程序将它的可用内存分成三个独立部分:一个是具有外部链接的,具有内部链接的以及具有空链接的静态变量,一个是自动变量,另个一个是动态分配的内存。

       静态存储时期:在编译时就已经知道了该存储变量所需的内存数量,存储在这一部分的数据在整个程序运行期间都可用直到程序结束时终止。

      自动 变量在程序进入包含该变量定义的代码时产生,在退出这一块代码时终止,将这一部分处理为一个堆栈,也就是说在内存中,新变量创建时按顺序加入,在消亡时按相反顺序移除。

       动态分配的内存在调用malloc函数或相关函数时产生,在调用 free函数时释放,由程序员而不是系统固定的规则控制内存持续时间,而且使用动态内存往往导致进程比使用堆栈内存慢。





第十二章 分配内存: malloc ()与free () 及calloc()