C语言动态申请内存函数 c语言动态内存分配malloc

malloc函数的用法是什么?C语言中malloc是动态内存分配函数 。
函数原型:void *malloc(unsigned int num_bytes);
参数:num_bytes 是无符号整型,用于表示分配C语言动态申请内存函数的字节数 。
返回值:如果分配成功则返回指向被分配内存C语言动态申请内存函数的指针(此存储区中的初始值不确定),否则返回空指针NULL 。void* 表示未确定类型的指针,void *可以指向任何类型的数据 , 更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者...)
功能:分配长度为num_bytes字节的内存块
注意:当内存不再使用时,应使用free()函数将内存块释放 。函数返回的指针一定要适当对齐 , 使其可以用于任何数据对象 。关于该函数的原型,在以前malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换 。
扩展资料:
实现malloc的方法:
(1)数据结构
首先我们要确定所采用的数据结构 。一个简单可行方案是将堆内存空间以块的形式组织起来,每个块由meta区和数据区组成 , meta区记录数据块的元信息(数据区大小、空闲标志位、指针等等) 。
数据区是真实分配的内存区域,并且数据区的第一个字节地址即为malloc返回的地址。
(2)寻找合适的block
现在考虑如何在block链中查找合适的block 。一般来说有两种查找算法:
First fit:从头开始,使用第一个数据区大小大于要求size的块所谓此次分配的块
Best fit:从头开始,遍历所有块,使用数据区大小大于size且差值最小的块作为此次分配的块
两种方式各有千秋,best fit有较高的内存使用率(payload较高) , 而first fit具有较高的运行效率 。这里我们采用first fit算法 。
数据结构基础之动态内存分配(malloc)C语言提供了四个基本的动态内存管理(内存分配与释放)函数 , 这些函数的原型包含在stdlib.h头文件里 。
它们分别是:
1.malloc()/free()函数
2.calloc()函数
3.realloc()函数
malloc的全称是memory allocation,中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间 , 就需要用到动态的分配内存,一般需和free函数配对使用 。
本篇只对malloc进行讲解
malloc()函数在堆中申请分配一个大小为size个字节的连续内存空间,若成功分配,则返回一个指向 所分配空间起始地址 的指针,否则返回空指针(NULL) 。
free()函数用来释放已分配的内存空间,参数p是待释放的内存空间的首指针
C语言-动态分配内存 malloc & free 需要用一个数组来保存用户的输入 , 但是却不知道用户会输入多少条数据 。
(1) 如果设一个太大的数组 , 则显得浪费内存
(2) 如果设得太?。峙虏还?
问题:如何做到恰好够用、又一点不浪费呢?
系统中存在一个内存管理器(MM, Memory Manager),它负责管理一堆闲置内存 。它被设计用于解决此类问题 。
MM提供的服务:应用程序可以向MM申请(借出)一块指定大小的内存 , 用完之后再释放(还回) 。
应用程序在使用malloc时 , 要把返回值转换成目标类型 。
这块内存和数组没有本质区别,用法完全相同 。
需要先计算需要多少字节的内存空间
数组举例子:
释放的时候需要注意,因为在for循环执行之后,p的地址往前移动了10,所以需要减去10, 然后再释放p , 不然会有问题

推荐阅读