malloc申请的内存在哪里分配_为什么运存16G实际只有8G

malloc申请的内存在哪里分配_为什么运存16G实际只有8G内存管理#1-内存的申请与释放一次简单的内存分配char* buff = (char*)malloc(32);上面简单的一行c代码,则成功申请了一块32个字节内存,我们就可以在该块内存块上写入任何想要的字符。当使用完以后,free(buff) 则就可以释放该

内存管理#1-内存的申请与释放   一次简单的内存分配   char* buff = (char*)malloc(32);   上面简单的一行c代码,则成功申请了一块32个字节内存,我们就可以在该块内存块上写入任何想要的字符。   当使用完以后,free(buff) 则就可以释放该块内存。   问题   1、 malloc申请的内存是从哪里来?   2、 free释放的内存又去了哪里?   直接从操作系统申请   最简单的方式则是直接从向操作系统申请内存,释放后直接还给操作系统。
malloc申请的内存在哪里分配_为什么运存16G实际只有8G
malloc申请的内存在哪里分配_为什么运存16G实际只有8G   缺点:   ①内存浪费,操作系统给程序分配最小的内存块为4k,虽然只要32字节,但是还是用了4K的   ②性能差,每次直接从操作系统分配内存会很慢,需要需要做虚拟地址到物理地址的映射、物理内存页的清0等操作   加入一个中间层-内存池   申请   在malloc和操作系统中间加入一个内存池,malloc不再直接向操作系统申请内存,而是向内存池申请内存。这时就可以根据malloc的大小,给出一块一样大(实际一般都要大一点)的内存块。而且这块内存早就准备好,可以直接使用,所以性能就快很多。   
malloc申请的内存在哪里分配_为什么运存16G实际只有8G
malloc申请的内存在哪里分配_为什么运存16G实际只有8G   释放   释放的时候,不用直接把内存还给操作系统,直接返回给内存池就可。下次再次申请时,就可以直接使用。   
malloc申请的内存在哪里分配_为什么运存16G实际只有8G
malloc申请的内存在哪里分配_为什么运存16G实际只有8G   现在加了一个内存池的中间层方案看起来非常完美,不过又带来了很多疑问   ①怎么从空闲的内存块找出这次申请想用的内存?   ②现在的进程都是多线程的,多线程同时申请的时候该怎么办?   ③…   总结   我们知道了malloc的内存是从内存池分配的,不是直接从操作系统分配的。知道了内存池分配内存带来很多好处,但还是又很多疑惑没解决。

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

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

(0)
上一篇 2024年 9月 13日 上午9:18
下一篇 2024年 9月 13日 上午9:21

相关推荐

关注微信