我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:大丰收高手论坛 > 动态分配 >

c语言malloc如何实现动态分配

归档日期:07-22       文本归类:动态分配      文章编辑:爱尚语录

  malloc当需要多大内存时,就给你多大,但是定义的时候还是需要给定大小,那他是如何实现动态分配的呢?

  小弟还是不明白,问题依旧如上。 是否动态分配函数可以随时更改和回收所分配内存的大小,这才是他的特点所在呢?展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  动态的意思是和静态对比的.那我们先看一下静态是什么.当我们写一个程序的时候要定义一个放置名字的数组.中国人的名字很短最长也就是6,7个字所以在程序一开始的时候定义一个数组像这样char name[10];这样足够放置名字了.这个定义就是静态的也就是说这个数组的大小是在写程序的时候就已经定下来.但是很多时候我们写程序的时候不知道一个数组要多大的空间.比如一个帖子的内容.可能是5个字也可能是100个字也可能成千上万.如果所有的帖子的内容的数组都使用content[10000]那对于5个字的帖子这就是浪费空间.所以现在需要一种能在程序运行的时候(因为运行的时候都是知道确切的知道需要的大小的)定义存储空间的办法这个就是malloc动态分配的意思.也就是说程序中运行的时候分配空间大小.而不是在你写程序的时候就规定死大小.关于malloc定义的时候需要大小你这个是个误解..其实你的程序可以在运行的时候传入大小.比如定义个变量int size = 0;当你运行的时候可以动态改变这个size变量的值.然后使用malloc来分配空间 *p = (int*)malloc(size);这样你就可以在运行的时候控制分配空间的大小了

  知道合伙人数码行家采纳数:33561获赞数:63123学的虽是计算机网络,但是读的书很多也很杂也是一知半解,所以到现在我也不知道我有啥能力!只知道努力!向TA提问展开全部

  返回值:如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放。函数返回的指针一定要适当对齐,使其可以用于任何数据对象。

  说明:关于该函数的原型,在以前malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换。

  如果把10改成以变量num,p=(int *)malloc(num*sizeof(int)),num是你事先不知道的值,只有在程序运行中,才能得到此变量的值,这是就根据num的值动态的分配所需要的内存大小

  展开全部@@内容摘要:以简单的C代码介绍malloc应该具有的功能和接口,也许各种分配器算法差异很大,但其按照标准C约定,所提供给用户的接口必须一样,功能也一样(性能有差异)。@@

  Malloc的简单实现C标准库中提供的手工管理内存的函数定义在stdlib.h,包括以下四个函数:

  其中malloc/free大家比较熟悉,我们的示例中仅仅简单的将应用的内存请求转交给操作系统(^_^)处理:

  通过上面两端小代码,对于calloc/realloc的作用应该很清楚了吧,当然实际的内存库实现中很少有用通过malloc/free来实现realloc的,因为在realloc向扩展内存的时候,分配器会真的尝试能否扩展,只有扩展不成功的时候才会进行类似上面事例的代码进行一次内存拷贝。

  至于malloc和free的实现在各个平台下的各个Libc发布版本中差异很大。Unix通常通过brk系统调用实现。

  最后介绍多核或多处理器环境下的内存管理算法Hoard,然后再次讨论小对象分配技术。

本文链接:http://quangdungfc.net/dongtaifenpei/581.html