1. 首页 > 常识

对象内存池,内存池,对象池,MemoryPool c语言内存池

本文为大家介绍了 对象内存池,内存池,对象池,MemoryPool ,还有的小伙伴在问c语言内存池,下面小编给大家细致的讲述一下。

在堆栈的基础上实现对象内存池的管理。

函数定义

public class MemoryPool where T: new() { // Fields private Stack _items; private object _sync; // Methods public MemoryPool(); public T Pop(); public T PopExist(); public Queue Pops(int count); public bool Push(T item, [Optional, DefaultParameterValue(0x3e8)] int max); // Properties public int Count { get; } } public MemoryPool() { this._items = new Stack(); this._sync = new object(); } //堆栈弹出 public T Pop() { object obj2 = this._sync; lock (obj2) { if (this._items.Count == 0) { return Activator.CreateInstance(); } return this._items.Pop(); } } public T PopExist() { object obj2 = this._sync; lock (obj2) { if (this._items.Count == 0) { return default(T); } return this._items.Pop(); } } public Queue Pops(int count) { Queue queue = new Queue(count); object obj2 = this._sync; lock (obj2) { for (int i = 0; i < count; i++) { if (this._items.Count == 0) { queue.Enqueue(Activator.CreateInstance()); } else { queue.Enqueue(this._items.Pop()); } } } return queue; } public bool Push(T item, [Optional, DefaultParameterValue(0x3e8)] int max) { if (this._items.Count >= max) { return false; } object obj2 = this._sync; lock (obj2) { if (this._items.Count >= max) { return false; } if (item is IMemoryPool) { ((IMemoryPool) item).InitMemoryPool(); } this._items.Push(item); } return true; } public int Count { get { return this._items.Count; } }

 对象内存池,内存池,对象池,MemoryPool  c语言内存池

c语言内存池

通常,我们都采用NEW或者malloc动态申请内存.一般来说,少量的操作不会造成什么影响,但是,如果我们频繁去申请内存块,会造成效率上的损失,更有甚者,我造成内存碎片的存在,从而影响系统的效率(所有程序都可能受到影响),一种最常见的解决办法就是一次性申请一个大点的内存块,每次需要的时候就"切"一块下来用,如果该内存块不够才去申请内存.这种技术叫做内存池.一般来说,内存池对于每次申请固定大小的内存的应用(比较频繁)会比较有好处.

内存池则是在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用.当有新的内存需求时,就从内存池中分出一部分内存块,若内存块.

个人觉得是资源有限,需要对资源分配数量控制时使用“池”这种概念.比如线程池,数据库连接池等.