(注意,std :: allocator通常用于分配许多小对象,即使用std :: List时.)
编辑澄清.
说,我想使用许多小对象的std :: List,然后std :: allocator的实现使用:: new分配每个对象会导致运行时的显着开销(但我认为也是内存).分配大块对象并逐个分发它们会更有效率.为此,我需要一个符合标准的分配器(不需要从std :: allocator派生,但必须实现相同的概念),可以与任何std库容器一起使用并提供所需的内存管理,理想情况下允许我告诉它我可能单独分配多少个对象.
解决方法 GCC提供了一些 extension allocators作为std :: allocator的替代品.你还没有真正说出你的要求是什么,所以不可能说它们中的任何一个是否适合你.
编辑以下OP编辑:
Say,I want to use a
std::List
of many small objects,then implementations ofstd::allocator
which allocate each object using::new
cause significant overhead in run time (but also memory I think).
为什么还要记忆?无论内存来自新的还是自定义分配器,每个std :: List节点中的附加指针的开销都将存在.你只是意味着由堆完成的簿记来跟踪所有的小型分配吗?
It is much more efficIEnt to allocate big chunks of objects and hand them out one by one.
你测量过吗?
如果您不希望分配大量单独节点的开销,您确定std :: List是正确的容器吗? vector或deque怎么样?
boost :: stable_vector仍然是基于节点的,但每个节点的内存开销比std :: List少.
boost :: flat_map< int,T>不是基于节点的,可以用来代替std :: List< T>
分配器很棘手,并不总是(真实或感知)问题的最佳答案.
总结以上是内存溢出为你收集整理的哪些C std兼容自定义分配器可用?全部内容,希望文章能够帮你解决哪些C std兼容自定义分配器可用?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)