我如何使用microsoft的C分配器
我在
http://msdn.microsoft.com/en-us/library/ee292117.aspx和
http://msdn.microsoft.com/en-us/library/ee292134.aspx上看到Microsoft为专门的分配器提供了宏和类,但我不确定每种缓存策略是什么,如何使用它们.有人可以解释何时使用这些部件?
>缓存模板 > cache_freelist – cache_freelist模板类维护一个大小为Sz的内存块的空闲列表.当空闲列表已满时,它使用operator delete来释放内存块.当空闲列表为空时,它使用operator new来分配新的内存块.空闲列表的最大大小由Max参数中传递的类max类确定.每个存储器块保存Sz字节的可用存储器以及运算符new和operator delete所需的数据. 我自己写了几个分配器,但是这个文档只是……令人困惑. 解决方法
哇,他们真的乱了文档,不是吗? (当我在Dinkumware时,我写了那段代码)
这里的分配器是基于策略的:您可以指定缓存策略和同步策略. 基本思想是使编写使用内部缓存的分配器更容易,并且可以跨线程同步.有六个预定义的分配器;他们的名字都以allocator_开头.如果符合您的需要,请使用它们.在MSDN中,查看特定分配器描述的第一段;不要阅读“备注”,他们在那里谈论ALLOCATOR_DECL;. 您还可以使用该代码创建自己的分配器,这些分配器使用预定义的缓存策略(名称以cache_开头的模板)和同步策略(名称以sync_开头的模板),或者使用您自己的缓存模板和同步模板.从这些部分获取可用的分配器有点单调乏味,因此标题提供了ALLOCATOR_DECL作为生成所有必需样板的便捷方式,而无需自己编写. ALLOCATOR_DECL有三个参数:要使用的缓存模板的名称,要使用的同步模板的名称以及您正在创建的分配器的名称.所以不要写作 template <class T> class name : public Dinkum::allocators::allocator_base<T,sync<cache > > { public: name() {} template <class U> name(const name<U>&) {} template <class U> name& operator = (const name<U>&) {return *this; } template <class U> struct rebind { /* convert a name<T> to a name<U> */ typedef name<U> other; }; }; 你会写ALLOCATOR_DECL(缓存,同步,名称);. allocator_base完成了繁重的工作;分配器本身必须是派生类型,以便它可以正确处理重新绑定. (该代码中的Dinkum来自Dinkumware文档;我不知道微软的东西将这些名称放在哪个命名空间中,但可能是宏在那里放了正确的名称). 对于缓存模板: > cache_freelist维护节点大小的块的链表;列表的最大大小由模板参数Sz设置,节点分配由operator new和operator delete管理.> cache_suballoc添加另一个层来管理一组Nelts节点块,所有这些层都被分配为一个blob;新元素的分配首先查看空闲列表,如果没有空闲,则分配新的blob.在销毁分配器之前,不会删除内存块.> cache_chunklist在blob中分配内存(如cache_suballoc),但不使用公共空闲列表;当一个块被释放时,它会回到它的blob的空闲列表中.释放所有blob块后,将删除blob本身. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Microsoft Media Foundation官方文档翻译(8)《
- windows-server-2008-r2 – Windows Server Back
- 在Windows上进行Qt dll部署
- winapi – “@”在以Windows字体名称作为前缀时的
- 将Cygwin路径转换为文件中的Windows路径
- 目录树加载并绑定右键点击事件
- windows-server-2003 – Windows Server 2003文件
- windows-server-2008 – 如何使用自定义名称服务
- 在两台Windows机器之间创建VPN的最佳方法是什么?
- windows – Mac OS X上的/ proc / self / cmdlin