malloc申请的内存怎么释放_malloc 申请最大内存

malloc申请的内存怎么释放_malloc 申请最大内存内存管理#1-内存的申请与释放一次简单的内存分配char* buff = (char*)malloc(32);上面简单的一行c代码,则成功申请了一块32个字节内存,我们就可以在该块内存块上写入任何想要的字符。当使用完以后,free(buff) 则就可以释放该块内存。问题1、 mall

内存管理#1-内存的申请与释放
  一次简单的内存分配

  char* buff = (char*)malloc(32);

  上面简单的一行c代码,则成功申请了一块32个字节内存,我们就可以在该块内存块上写入任何想要的字符。

  当使用完以后,free(buff) 则就可以释放该块内存。

  问题

  1、 malloc申请的内存是从哪里来?

  2、 free释放的内存又去了哪里?

  直接从操作系统申请

  最简单的方式则是直接从向操作系统申请内存,释放后直接还给操作系统。malloc申请的内存怎么释放_malloc 申请最大内存malloc申请的内存怎么释放_malloc 申请最大内存

  缺点:

  ①内存浪费,操作系统给程序分配最小的内存块为4k,虽然只要32字节,但是还是用了4K的

  ②性能差,每次直接从操作系统分配内存会很慢,需要需要做虚拟地址到物理地址的映射、物理内存页的清0等操作

  加入一个中间层-内存池

  申请

  在malloc和操作系统中间加入一个内存池,malloc不再直接向操作系统申请内存,而是向内存池申请内存。这时就可以根据malloc的大小,给出一块一样大(实际一般都要大一点)的内存块。而且这块内存早就准备好,可以直接使用,所以性能就快很多。

  malloc申请的内存怎么释放_malloc 申请最大内存malloc申请的内存怎么释放_malloc 申请最大内存

  释放

  释放的时候,不用直接把内存还给操作系统,直接返回给内存池就可。下次再次申请时,就可以直接使用。

  malloc申请的内存怎么释放_malloc 申请最大内存malloc申请的内存怎么释放_malloc 申请最大内存

  现在加了一个内存池的中间层方案看起来非常完美,不过又带来了很多疑问

  ①怎么从空闲的内存块找出这次申请想用的内存?

  ②现在的进程都是多线程的,多线程同时申请的时候该怎么办?

  ③…

  总结

  我们知道了malloc的内存是从内存池分配的,不是直接从操作系统分配的。知道了内存池分配内存带来很多好处,但还是又很多疑惑没解决。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/92853.html

(0)
上一篇 2024年 5月 29日 下午4:28
下一篇 2024年 5月 29日 下午4:42

相关推荐

关注微信