1 / 12
文档名称:

free函数和malloc函数.doc

格式:doc   大小:32KB   页数:12
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

free函数和malloc函数.doc

上传人:xiarencrh 2020/8/2 文件大小:32 KB

下载得到文件列表

free函数和malloc函数.doc

相关文档

文档介绍

文档介绍:free函数和malloc函数malloc原型:externvoid*malloc(unsignedintnum_bytes);用法:#include<>或#include<>功能:分配长度为num_bytes字节的当内存不再使用时,应使用free()函数将内存块释放。malloc的语法是:指针名=(数据类型*)malloc(长度),(数据类型*)://#include<>#include<>main(){char*p;clrscr();//clearscreenp=(char*)malloc(100);if(p)printf("MemoryAllocatedat:%x",p);elseprintf("NotEnoughMemory!\n");if(p)free(p);getchar();return0;}malloc()函数的工作机制malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的注意,虽然这里的存储块是通过动态分配得到的,但是它的大小也是确定的,同样不允许越界使用。例如上面程序段分配的块里能存n个双精度数据,随后的使用就必须在这个范围内进行。越界使用动态分配的存储块,尤其是越界赋值,可能引起非常严重的后果,通常会破坏程序的运行系统,可能造成本程序或者整个计算机系统垮台。下例是一个动态分配的例子:#include<>main(){intcount,*array;/*count是一个计数器,array是一个整型指针,也可以理解为指向一个整型数组的首地址*/if((array(int*)malloc(10*sizeof(int)))==NULL){printf("不能成功分配存储空间。");exit(1);}for(count=0;count〈10;count++)/*给数组赋值*/array[count]=count;for(count=0;count〈10;count++)/*打印数组元素*/printf("%2d",array[count]);}上例中动态分配了10个整型存储区域,然后进行赋值并打印。例中if((array(int*)malloc(10*sizeof(int)))==NULL)语句可以分为以下几步:1)分配10个整型的连续存储空间,并返回一个指向其起始地址的整型指针2)把此整型指针地址赋给array3)检测返回值是否为NULL3(malloc()工作机制malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。4(malloc()在操作系统中的实现在C程序中,多次使用malloc()和free()。不过,您可能没有用一些时间去思考它们在您的操作系统中是如何实现的。本节将向您展示malloc和free的一个最简化实现的代码,来帮助说明管理内存时都涉及到了哪些事情。在大部分操作系统中,内存分配由以下两个简单的函数来处理:void*malloc(longnumbytes):该函数负责分配numbytes大小的内存,并返回指向第一个字节的指针。voidfree(void*firstbyte):如果给定一个由先前的malloc返回的指针,那么该函数会将分配的空间归还给进程的“空闲空间”。malloc_init将是初始化内存分配程序的函数。它要完成以下三件事:将分配程序标识为已经初始化,找到系统中最后

最近更新

网络社区检测算法-第1篇 35页

2025年四川文轩职业学院马克思主义基本原理概.. 13页

老龄心理健康现状与对策研究 29页

结石形成过程模拟研究 35页

绿色建筑融资风险评估 35页

2025年天津国土资源和房屋职业学院马克思主义.. 12页

2025年天津师范大学马克思主义基本原理概论期.. 12页

2025年天津职业技术师范大学马克思主义基本原.. 13页

高超声速推进系统 35页

绿色设计理念在设计行业的推广 26页

绢纺和丝织行业的数字化转型 28页

风机振动信号的自适应滤波技术 35页

2025年安徽财经大学马克思主义基本原理概论期.. 12页

高性能存储设备研发 38页

钢结构施工过程质量控制技术 35页

网络攻击检测与防御机制研究 29页

2025年山东中医药大学马克思主义基本原理概论.. 12页

2025年山西科技学院马克思主义基本原理概论期.. 12页

2025年巍山县幼儿园教师招教考试备考题库及答.. 31页

2025年平阴县招教考试备考题库带答案解析 32页

2025年广州东华职业学院马克思主义基本原理概.. 13页

2025年广西农业职业技术大学马克思主义基本原.. 13页

2025年广西职业技术学院单招职业技能测试题库.. 43页

2025年建平县招教考试备考题库带答案解析 31页

2025年彭泽县招教考试备考题库带答案解析 31页

2025年惠州工程职业学院单招综合素质考试题库.. 44页

2025年文成县招教考试备考题库带答案解析(必.. 31页

2025年无棣县幼儿园教师招教考试备考题库带答.. 30页

2025年晋中职业技术学院单招职业倾向性测试题.. 44页

2025年朗县招教考试备考题库含答案解析(夺冠.. 30页