浅析存储管理函数
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著)两书,特此致谢。
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著)两书,特此致谢。
相关文章推荐
- 接口
- Resource Types
- 设计模式:迭代器模式(Iterator)
- ViewPager动态添加小圆点
- hdoj 1161 mistakes gets()的使用
- 设计模式:迭代器模式(Iterator)
- Contest Hunter Round #70 - 连续两大交易事件杯省选模拟赛
- opendaylight(Li)下toaster APP的简单实现
- 数据结构(Splay平衡树):HDU 1890 Robotic Sort
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- FlyWeight模式——设计模式学习笔记
- Android设计模式之单例模式
- 使用maven创建web项目
- 做题时碰到的一些技巧方法
- 绘图(一,基础知识)
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- MMO游戏技能攻击区域的计算3--效率分析
- ImageLoader
- Basic-Paxos原理
- 【数据库】Oracle中的日期型及处理方法