什么时候需要malloc C语言
电脑内存不是够大嘛,为什么还要去寻求内存空间??另外,还要free又是为什么?电脑不至于这点空间也不够吧><...
电脑内存不是够大嘛,为什么还要去寻求内存空间??
另外,还要free又是为什么?电脑不至于这点空间也不够吧>< 展开
另外,还要free又是为什么?电脑不至于这点空间也不够吧>< 展开
展开全部
电脑内存是很大,但是电脑不知道你需要多大的内存啊,!电脑是机器,不是人,如果你不明确告诉它该怎么做,它会崩溃的。所以用malloc()函数不是因为电脑内存不够采取申请的,而是为了告诉电脑我需要你分配给我多大的内存空间!为什么要用free()函数!你首先要明白malloc()叫做动态内存分配函数,之所以叫动态分配,就是因为它申请的空间可以根据用户的意愿用free()随时释放!所以,malloc()函数和free()函数常常配套使用。另外,如果你运行一个很大的程序,比如说一个大型游戏,它需要的内存空间是很大的,如果你用完后不使用free()释放掉,可能你第一遍玩的时候还行,第二遍玩的时候就有点卡,第三遍可能就没法玩了。所以,不用的空间就释放掉是个很好的编程习惯。
下面是我学数据结构时整理的关于malloc()函数的资料,不知道能不能帮你解决问题:
malloc()是动态内存分配函数,用来向系统请求分配内存空间。当无法知道内存具体的位置时,想要绑定真正的内存空间,就要用到malloc()函数。因为malloc只管分配内存空间,并不能对分配的空间进行初始化,所以申请到的内存中的值是随机的。
而且,需要注意的是,当申请到的空间不再使用时,要用free()函数将内存空间释放掉,这样可以提高资源利用率,最重要的是----就是因为它可以申请内存空间,然后根据需要进行释放,才被称为“动态内存分配”!
malloc()函数实质体现在,它有一个可以将可用内存块连接成一个长长的列表的链表,这个链表就是所谓的空闲链表。调用malloc()函数时,它沿着连接表寻找一个大到可以满足用户请求要求的连续的内存块,然后将内存块一分为二,一块的大小与用户请求的内存大小相等,另一块就是剩下的内存块。接下来,它将用户申请的那块传递给用户,将另一块返回到连接表上(如果另一块有的话)。
调用free()函数的时候,它将用户想要释放的内存块链接到空闲链上。我们可以想到,最后的空闲链链接的内存空间一小块一块的块,如果这是用户申请分配一个较大的内存空间,那么空闲链上可能没有符合用户要求的内存块了,这个时候,malloc()函数请求延时,并开始在空闲链上翻箱倒柜的检查各内存块,对他们进行整理,将相邻的小内存块合并成较大的内存块。如果无法获得符合用于要求的内存空间,那么malloc()函数就会返回NULL,因此,调用malloc()函数的时候,一定要判断它的返回值。
Linux Libc6是在使用free()函数整合相邻的内存块,使之能形成一个较大的内存块。这两种处理方法异曲同工。
如果你是因为数据结构产生困惑的话可以去我博客里面看看,有一篇是关于线性表知识分析的。
http://www.cnblogs.com/fjutacm/archive/2013/04/24/3041447.html
下面是我学数据结构时整理的关于malloc()函数的资料,不知道能不能帮你解决问题:
malloc()是动态内存分配函数,用来向系统请求分配内存空间。当无法知道内存具体的位置时,想要绑定真正的内存空间,就要用到malloc()函数。因为malloc只管分配内存空间,并不能对分配的空间进行初始化,所以申请到的内存中的值是随机的。
而且,需要注意的是,当申请到的空间不再使用时,要用free()函数将内存空间释放掉,这样可以提高资源利用率,最重要的是----就是因为它可以申请内存空间,然后根据需要进行释放,才被称为“动态内存分配”!
malloc()函数实质体现在,它有一个可以将可用内存块连接成一个长长的列表的链表,这个链表就是所谓的空闲链表。调用malloc()函数时,它沿着连接表寻找一个大到可以满足用户请求要求的连续的内存块,然后将内存块一分为二,一块的大小与用户请求的内存大小相等,另一块就是剩下的内存块。接下来,它将用户申请的那块传递给用户,将另一块返回到连接表上(如果另一块有的话)。
调用free()函数的时候,它将用户想要释放的内存块链接到空闲链上。我们可以想到,最后的空闲链链接的内存空间一小块一块的块,如果这是用户申请分配一个较大的内存空间,那么空闲链上可能没有符合用户要求的内存块了,这个时候,malloc()函数请求延时,并开始在空闲链上翻箱倒柜的检查各内存块,对他们进行整理,将相邻的小内存块合并成较大的内存块。如果无法获得符合用于要求的内存空间,那么malloc()函数就会返回NULL,因此,调用malloc()函数的时候,一定要判断它的返回值。
Linux Libc6是在使用free()函数整合相邻的内存块,使之能形成一个较大的内存块。这两种处理方法异曲同工。
如果你是因为数据结构产生困惑的话可以去我博客里面看看,有一篇是关于线性表知识分析的。
http://www.cnblogs.com/fjutacm/archive/2013/04/24/3041447.html
展开全部
malloc是内存分配函数,free是相对应的释放内存函数。
第一个问题:内存是够大的,但是每一个程序都需要一段内存空间来运行,如果这之间内存相互交叉使用,也是a程序使用了b程序的内存,并修改了这段本不属于自己的内存数据,会有不可预知的结果,malloc函数就给程序员提供了申请一段属于自己的内存空间,这段空间操作系统是不会主动帮你释放的,需要程序员自己,也就是这段内存的使用者来进行释放,这就涉及到第二个问题了。
第二个问题:free函数和malloc是相对应的,说是释放内存,其实本质上的意思是交出这块内存的使用权,重新将其还给操作系统。试想一下,如果总malloc,但不释放free的话,内存总将会没有的。
第一个问题:内存是够大的,但是每一个程序都需要一段内存空间来运行,如果这之间内存相互交叉使用,也是a程序使用了b程序的内存,并修改了这段本不属于自己的内存数据,会有不可预知的结果,malloc函数就给程序员提供了申请一段属于自己的内存空间,这段空间操作系统是不会主动帮你释放的,需要程序员自己,也就是这段内存的使用者来进行释放,这就涉及到第二个问题了。
第二个问题:free函数和malloc是相对应的,说是释放内存,其实本质上的意思是交出这块内存的使用权,重新将其还给操作系统。试想一下,如果总malloc,但不释放free的话,内存总将会没有的。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
malloc是分配堆内存,可以动态分配内存,如果只分配,不释放,内存迟早会用光!楼主这种想法不对呀!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-04-24
展开全部
是给函数分配空间好不,与电脑内存无关,比如你要使用数组,是不是要初始化数组??一个道理,然后free就是函数调用完或者执行完释放空间,能够不占用内存空间而已!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询