malloc函数的实现原理

malloc—动态内存分配

malloc是我们在动态分配内存时常使用到的一个函数,malloc需要和free函数搭配使用。同时动态内存分配函数还有如calloc、realloc,同时动态分配的内存都在堆上。

在MSDN中,malloc的作用是开辟一个内存块。

函数原型 void *malloc(size_t size);

  • size是开辟的内存所占多少字节。

  • 返回类型是void* 型(未确定类型的指针),void* 可以强转为任何类型的指针。

  • 返回值:如果内存分配成功返回指向被分配内存的指针;则否返回空指针NULL。 当分配的这块内存不再使用时,应使用free将内存块释放掉。

malloc工作机制/实现原理:
(查资料得)

它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表

调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后将该内存块分割成用户所需要的内存大小,把要分配给用户的内存传给用户,剩下的内存返回到连接表上。

free的实现原理:

调用free时,它将用户释放的内存块连接到空闲链上。所以最后空闲链可能被分割成了很多的小内存片段,而这时候用户申请一个很大的内存片段,空闲链上可能就没有这么大的片段了。这时候malloc请求延时,在空闲链上合并相邻的小空间块。

猜你喜欢

转载自blog.csdn.net/wandandi/article/details/81021125