- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
boost文档如下:
Note
The underlying
singleton_pool
used by the this allocator constructs a pool instance that is never freed. This means that memory allocated by the allocator can be still used aftermain()
has completed, but may mean that some memory checking programs will complain about leaks.
我很困惑,因为我检查了代码,singleton_pool
似乎仍然只在当前进程的堆上创建。 IE。如果进程被操作系统杀死,这样的池是否会被释放?那么上面的注释仅仅意味着如果一些守护线程继续运行并且这样的池在 main() 之后仍然可用?或者它实际上意味着即使整个进程被杀死,池也不会被释放?
在我看来,pool_allocator
和 fast_pool_allocator
都使用相同的机制来分配内存,即来自这样的 singleton_pool
单例。但是,此注释并未针对 fast_pool_allocator
指定。对于上面的注释,我认为它们的行为相同。我说得对吗?
请帮忙。谢谢。
最佳答案
singleton_pool
实现线程安全(在某些条件下)无锁单例,使用非局部静态变量初始化的特性。部分源码:
template <typename Tag,
unsigned RequestedSize,
typename UserAllocator,
typename Mutex,
unsigned NextSize,
unsigned MaxSize >
class singleton_pool
{
...
struct object_creator
{
object_creator()
{ // This constructor does nothing more than ensure that instance()
// is called before main() begins, thus creating the static
// T object before multithreading race issues can come up.
singleton_pool<Tag, RequestedSize, UserAllocator, Mutex, NextSize, MaxSize>::get_pool();
}
inline void do_nothing() const
{
}
};
static object_creator create_object;
}; // struct singleton_pool
非局部变量作为程序启动的一部分在主函数开始执行之前初始化,并在程序终止时被拆除。这样singleton_pool
就会在main()
之前创建,在main()
之后销毁。如果进程无论如何终止,当然 pool 将被释放。
关于c++ - boost pool_allocator 内存池行为说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33164356/
为什么 boost::fast_pool_allocator 建立在单例池之上,而不是每个分配器实例一个单独的池?或者换句话说,为什么只提供那个,而不是每个分配器都有一个池的选项?那样做会不会是个坏主
我试图从 Boost 库中添加相当有限的功能到我的项目中,即在“pool_allocator”类的帮助下为池中的小对象分配内存,并发现我需要将项目依赖项添加到 4调试静态库文件和 4 发布静态库文件。
boost文档如下: Note The underlying singleton_pool used by the this allocator constructs a pool instance
我正在训练一个用 TF 构建的模型。在第一个纪元,TF 比下一个纪元慢 100 倍,我看到如下消息: I tensorflow/core/common_runtime/gpu/pool_allocat
我有以下简单的测试代码。 #include #include #include "boost/pool/pool_alloc.hpp" struct Frame { uint32_t i{
我只是在试验 boost::pool 以查看它是否是我正在使用的东西的更快分配器,但我无法弄清楚如何将它与 boost::unordered_map 一起使用: 这是一个代码片段: unordered
更新:问题不再适用,因为我第一次写它,所以我修改了问题的标题。 现在应该把问题拿来问是否修改pool_allocator或 boost_pool_allocator接受Tag控制所用底层池选择的参数(
更新 根据评论、回答和其他研究,我得出的结论是 set 之间通常没有区别。和一个 map在节点开销方面。我接下来的问题是: How do you determine node overhead for
当我在 VS2017 中运行下一个代码时: #include #include #include int main() { using Map = std::map, boost::po
我是一名优秀的程序员,十分优秀!