问题标签 [boost-pool]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - boost::pool 实际内存分配
我正在尝试使用boost::pool
来自#include "boost/pool/pool.hpp"
.
我想检查分配了多少内存,boost::pool
所以我运行system("ps aux | grep myProgramExe | grep -v grep | awk '{print $5}'");
给我的命令(来自ps
手册页)VSZ - virtual memory size of the process in KiB (1024-byte units). Device mappings are currently excluded; this is subject to change. (alias vsize).
我得到了一些奇怪的东西:
代码(代码缩进 4 个空格,再加上 4 个空格,因为它嵌入在列表中)
/li>
输出是:
这很奇怪,因为:
a。我只想分配 4 个字节(next allocation
应该只有 1 个实例)。
湾。当块结束并且pool
死亡时,内存没有被释放。
现在我想分配大小为 128 的实例,我想在下一次分配中像这样分配 1024:
/li>
输出:
这很好,因为:
一个。我想分配128 * 1024 = 131072
字节,并得到19040 - 18908 = 132KB = 135168
字节。135168 - 131072 = 4096
字节(我认为这只是头顶的池)。
湾。当块结束时,内存被释放。
析构函数
/li>
输出:
这很奇怪,
一个。由于某种原因,已经分配了大小(在我调用
.b 之前)。大小没有pool.malloc()
在.delete
这可以解释吗?
我是否需要使用其他工具而不是ps
查看程序使用的内存?
c++ - boost pool_allocator 内存池行为说明
升压文档如下:
笔记
this 分配器使用的底层
singleton_pool
构造了一个永远不会被释放的池实例。这意味着分配器分配的内存在main()
完成后仍然可以使用,但可能意味着某些内存检查程序会抱怨泄漏。
我很困惑,因为我检查了代码并且singleton_pool
仍然似乎只在当前进程的堆上创建。即如果该进程被操作系统杀死,这样的池无论如何都会被释放?那么上面的注释仅仅意味着如果某个守护线程继续运行并且这样的池在main()之后仍然可用?或者它实际上意味着即使在整个过程被杀死后也不会释放池?
在我看来,两者pool_allocator
都fast_pool_allocator
使用相同的机制来分配内存,即从这样的singleton_pool
单例中分配内存。但是,此注释未指定用于fast_pool_allocator
. 对于上面的这样一个注释,我认为它们的行为相同。我对么?
请帮忙。谢谢。
c++ - 多线程应用程序的基于池的内存分配
自定义池分配器有哪些可用的改进性能?(例如在对池的多线程访问方面)
或者让我们说:这个问题有更新的答案吗? 多线程可以加速内存分配吗?这个问题是在 5 年前提出的。所以我想一些更新的答案会有所帮助。
c++ - 如何使用 boost::simple_segregated_storage?
我尝试使用 boost::simple_segregated_storage,但我无法理解如何正确使用它。没有任何样品。我在下一个方式使用它:
但是我收到了崩溃。我做错了什么,哪里错了?如何正确使用它?
c++ - 如何重用先前分配给c ++中向量的内存块
对于不同的结构,我有多个结构对象向量。现在我想为所有向量对象重用相同的内存。即,一旦我的工作完成了一个向量,我想从内存中删除它的元素并将该内存分配给另一个向量。即第一个向量是一个结构类型对象,第二个向量是一个完全不同结构的结构类型对象。我正在使用 Windows 8.1 64 位。
c++ - 如何使用 boost::pool 库创建自定义内存分配器
我是 boost 新手,我想知道 boost::pool 库究竟如何帮助我创建自定义内存分配器。我有两个结构对象向量。第一个向量的结构类型为 A,而第二个向量的结构类型为 B。如何将分配给第一个向量的内存重用于第二个向量。
shared-ptr - allocate_shared 与提升池分配器
我正在尝试将 std::allocate_shared 与提升池分配器一起使用,程序运行良好,但一段时间后它在共享指针析构函数中因段错误而崩溃。我想知道我的实现是否有错误。我在这里粘贴分配器,我在 ubuntu 上使用 gcc-7.2 编译器。请指教。
崩溃痕迹。
c++ - 释放 boost::singleton_pool 中的所有对象
有没有办法一次释放所有对象boost::singleton_pool
?
我看到我可以访问这些方法:
我想我可以通过手动迭代它们来使用它们来释放所有对象。但是,有没有办法说“释放所有对象”以便池再次完全释放?
本质上,我想要类似的东西,purge_memory()
但这不会将内存释放回系统,而是将其分配在池中。
原因是我在池中构建了一个大对象(~2GB),我想很快摆脱它并开始构建一个新对象。当前调用purge_memory()
大约需要 2 秒,并且还会向系统释放内存(在诊断或任务管理器中,您可以看到进程内存在减少)。我希望通过简单地释放池中的东西而不实际解除分配,我可以非常快速地炸毁第一个对象并开始构建下一个对象。
c++ - 提升单例池 release_memory 与 purge_memory
我在哪里可以找到Boost Singleton Poolpurge_memory
和in之间的区别?release_memory
在这里它说:
Singleton Usage是每个Pool是一个具有静态持续时间的对象的方法;也就是说,直到程序退出它才会被销毁。可以共享具有 Singleton Usage 的池对象;因此,单例用法也意味着线程安全。由具有 Singleton Usage 的 Pool 对象分配的系统内存可以通过
release_memory
或释放purge_memory
。
c++ - 如何获得需要为此处理程序完成的分配大小?
下面的代码使用提供自定义分配器的处理程序。分配器提供了一个BucketPool
可以分配不同大小的实例,但是需要在编译时指定可以分配的大小。
要使用BucketPool
,我只需指定一些任意模板参数,然后查看编译错误以查看实际需要的大小,然后将该大小添加为模板参数,然后迭代直到没有编译错误。
我注意到需要进行的分配大小可能会发生变化,例如在将 boost 更新到较新版本时。
如何在编译时确定大小,以便在迁移到新版本时不需要更新它?也许有一些特性可以用于这个......
编辑:c++17 是我可用的。因此,任何使用它的解决方案都是可取的。