内存管理#1-内存的申请与释放
一次简单的内存分配
char* buff = (char*)malloc(32);
上面简单的一行c代码,则成功申请了一块32个字节内存,我们就可以在该块内存块上写入任何想要的字符。
当使用完以后,free(buff) 则就可以释放该块内存。
问题
1、 malloc申请的内存是从哪里来?
2、 free释放的内存又去了哪里?
直接从操作系统申请
最简单的方式则是直接从向操作系统申请内存,释放后直接还给操作系统。
缺点:
①内存浪费,操作系统给程序分配最小的内存块为4k,虽然只要32字节,但是还是用了4K的
②性能差,每次直接从操作系统分配内存会很慢,需要需要做虚拟地址到物理地址的映射、物理内存页的清0等操作
加入一个中间层-内存池
申请
在malloc和操作系统中间加入一个内存池,malloc不再直接向操作系统申请内存,而是向内存池申请内存。这时就可以根据malloc的大小,给出一块一样大(实际一般都要大一点)的内存块。而且这块内存早就准备好,可以直接使用,所以性能就快很多。
释放
释放的时候,不用直接把内存还给操作系统,直接返回给内存池就可。下次再次申请时,就可以直接使用。
现在加了一个内存池的中间层方案看起来非常完美,不过又带来了很多疑问
①怎么从空闲的内存块找出这次申请想用的内存?
②现在的进程都是多线程的,多线程同时申请的时候该怎么办?
③…
总结
我们知道了malloc的内存是从内存池分配的,不是直接从操作系统分配的。知道了内存池分配内存带来很多好处,但还是又很多疑惑没解决。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/92853.html