-
直接转换法:从数据流图到模块结构图的存储器分配
资源介绍
7.8 存储器分配
ANSI C说明了三个用于存储空间动态分配的函数。
(1) malloc。分配指定字节数的存储区。此存储区中的初始值不确定。
(2) calloc。为指定长度的对象,分配能容纳其指定个数的存储空间。该空间中的每一位
( b i t )都初始化为0。
(3) realloc。更改以前分配区的长度 (增加或减少 )。当增加长度时,可能需将以前分配区的
内容移到另一个足够大的区域,而新增区域内的初始值则不确定。
#include
void *malloc(size_ts i z e) ;
void *calloc(size_tn o b j, size_t s i z e) ;
void *realloc(void *p t r, size_t n e w s i z e) ;
三个函数返回:若成功则为非空指针,若出错则为 N U L L
void free(void *p t r)
这三个分配函数所返回的指针一定是适当对齐的,使其可用于任何数据对象。例如,在一个特
定的系统上,如果最苛刻的对齐要求是 d o u b l e,则对齐必须在 8的倍数的地址单元处,那么这
三个函数返回的指针都应这样对齐。
回忆1 . 6节中对类属void *指针和函数原型的讨论。因为这三个 a l l o c函数都返回类属指针,
如果在程序中包括了< s t d l i b . h > (包含了函数原型),那么当我们将这些函数返回的指针赋与一个
不同类型的指针时,不需要作类型强制转换。
函数f r e e释放p t r指向的存储空间。被释放的空间通常被送入可用存储区池,以后可在调用
1 2 8 U N I X环境高级编程