【IT168专稿】一年一度的IT技术盛典——微软Tech·Ed2010大会将于2010年12月1日正式开幕。为了更好地为网友和读者报道今年的大会,我们IT168前方的记者在Tech·Ed开幕前来到了位于北京国家会议中心的会场,为读者带来第一时间的报道。

微软TechEd2010大会现场报道 12月1日-3日北京国家会议中心 —IT168直播专题
内存管理对于任何一个开发者来说都是熟悉的而且是令大家头疼的问题,特别是对那些用C和C++的朋友来讲,一个程序的大多数错误都会在内存管理上让你头痛,今天这个课就给大家简单的介绍一下内存管理是如何做的。

▲内存走的几个层级
通过今天的课程了解到,我们通常使用的malloc和free函数获取和释放的内存是带有cookie的,因为我们用户需要的内存大小不一,需要用cookie记录分配的大小。cookie分为上、下各8个byte,而且我们构造的对象越小cookie也就越多,因此内存浪费的也就越多。
我们在动态分配内存的时候,内存的使用需要分配器,分配器的作用是减少systemcall的调用,它就像一个内存池,申请一大块内存,然后自己按照需求进行分割,满足用户的实际需求。
如果用户需要的内存都是固定大小的话,这就需要分配器的工作,用来减少systemcall的调用,同时不要cookie,减少内存的浪费。
使用的过程是,你在使用容器的时候就会使用分配器,用malloc函数向系统申请内存然后自己进行切割,填充系统维护的链表。

▲malloc函数
如果需要分配的内存小于1024K时,分配器就会在malloc的体系中去找,系统的64条链表管理64种大小,等系统还回来之后就会连接到链表上。
上cookie记录区块的大小,在合并的时候使用。下cookie同样记录区块大小以及最后一个byte,同时还记录free和inuse的内存,有了下cookie就可以方便的进行向上的合并。