c语言malloc函数用法
引言:c语言malloc函数是C语言中应用最为普遍的一种动态内存分配方法,它可以提供大量内存来存储一个数组或者指针数组,当用完这些内存后又可以释放出来,这使得C语言有一定的灵活性,在C语言中使用动态内存分配和管理的重要性不言而喻。 一、malloc函数的定义
malloc函数(memory allocation,动态内存分配)是由C语言提供的函数,它的主要作用是从堆中提供指定数量的连续字节以供调用者使用,一定要注意,每次调用malloc函数必须指定分配内存大小,这个大小是以字节为单位的,malloc函数的原型如下: void *malloc(unsigned int size);
这里的size表示申请动态内存的大小,以字节为单位,malloc函数的返回值是void*,这是个指针,指向分配的内存的首地址,如果申请失败,则返回空指针。 二、malloc函数的使用 1、分配单个变量
最常见的malloc函数是用来分配单个变量,比如申请一个int型变量,则要申请4个字节的内存,这个时候只需要调用malloc函数: int *p;
p = (int *)malloc(sizeof(int)); 2、分配动态数组
- 1 -
C语言中很多时候要申请动态数组,比如申请长度为10的int型数组,则需要申请40个字节的内存,只需要将malloc函数的参数改为10*sizeof(int)即可: int *p;
p = (int *)malloc(10*sizeof(int)); 三、malloc函数的缺点 1、效率低
malloc函数的效率比较低,每次申请内存都要从堆中查找,为了满足连续内存的要求,可能要将内存进行移动,这会导致效率比较低。
2、不能做复杂的内存管理
malloc默认情况下只能用来分配和释放内存,不能对内存空间进行任何复杂的操作,例如,无法根据需要调整内存大小,无法释放内存中的某一部分,也无法把多个内存块合并为一个块等。 四、malloc函数的替代方案 1、C++中提供的new和delete
C++语言中提供了new和delete两个操作符来替代malloc函数,它们可以在分配内存的同时自动进行类型的转换,例如下面的代码: int *p;
p = new int[10];
这段代码会申请指针p指向40个字节的内存,并自动将它们转换为int类型,然后赋值给p,如果需要释放这个内存,只需要用
- 2 -
delete操作符释放即可,例如: delete []p;
2、windows系统下提供的GlobalAlloc等函数
windows系统提供了一系列的函数来申请和释放内存,例如GlobalAlloc函数,这个函数有三个参数,第一个参数是分配内存的方式,第二个参数表示要分配的字节数,第三个参数表示要申请的内存的访问类型,例如: HGLOBAL hGlobal;
hGlobal = GlobalAlloc(GMEM_MOVEABLE,100,PAGE_READWRITE); 结论:本文介绍了关于C语言中malloc函数用法的内容,malloc函数是C语言中应用最为普遍的一种动态内存分配方法,可以帮助程序员实现动态分配内存,但是malloc函数效率比较低,不能做过多高级的内存操作,因此有些程序员会使用C++中提供的new和delete,或者 windows系统下提供的GlobalAlloc等函数来替代malloc函数。
- 3 -