有没有办法列出所有共享内存对象的名称?
Is there a way to list names of all shared memory objects?
因为可以使用boost的find
managed_shared_memory
方法访问共享内存对象,例如:
res = segment.find<MyType> ("name");
有没有办法列出某个段中定义的所有共享内存对象的名称?我需要它进行调试,但没有找到增强 API。
您可以使用named_begin()
和named_end()
迭代器。
一个小演示,它创建具有随机长度的各种字符串向量,并报告它找到的数量:
住在科里鲁
#include <boost/interprocess/managed_mapped_file.hpp>
#include <boost/interprocess/containers/string.hpp>
#include <boost/interprocess/containers/vector.hpp>
#include <boost/container/scoped_allocator.hpp>
#include <iostream>
#include <vector>
namespace bip = boost::interprocess;
using Mem = bip::managed_mapped_file;
template <typename T = void>
using Alloc = boost::container::scoped_allocator_adaptor<
bip::allocator<T, Mem::segment_manager> >;
using String = boost::container::basic_string<char, std::char_traits<char>, Alloc<char> >;
template <typename T>
using Vector = boost::container::vector<T, Alloc<T> >;
int main() {
auto mf = Mem(bip::open_or_create, "test.bin", 20ul<<30);
std::cout << "Named #" << mf.get_segment_manager()->get_num_named_objects() << "n";
using Container = Vector<String>;
for (auto to_create: {"foo", "bar", "qux"}) {
auto& c = *mf.find_or_construct<Container>(to_create)(mf.get_segment_manager());
auto n = rand()%10;
for (int i = 0; i<n; ++i) {
c.emplace_back(std::to_string(i*i));
}
}
std::cout << "Named #" << mf.get_segment_manager()->get_num_named_objects() << "n";
for (auto it = mf.named_begin(); it != mf.named_end(); ++it) {
std::string_view name(it->name(), it->name_length());
std::cout << "Item " << name << " has " <<
reinterpret_cast<Container const*>(it->value())->size() << " elementsn";
}
}
指纹
Named #0
Named #3
Item bar has 6 elements
Item foo has 3 elements
Item qux has 7 elements
当然,我不鼓励使用reinterpret_cast
。像往常一样使用find_or_construct
界面。
相关文章:
- 迭代时从向量和内存中删除对象
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 对具有动态分配的内存和析构函数的类对象的引用
- 当指向对象的指针作为参数传递给 std::thread 时,内存可见性
- 内存清理程序报告全局对象构造中未初始化值的使用
- 如何删除列出的"QGraphicsPathItem"对象以控制进程内存使用情况?
- 准确了解对象在内存中的映射方式
- 完全释放静态对象内存
- C++ 对象内存管理
- 循环中的自动变量和自动对象内存分配
- 每个对象内存分配有多少开销
- 是隐式创建的默认构造函数,负责分配对象内存
- 使用 make_unique 语句重新分配unique_ptr对象 - 内存泄漏
- C++对象内存布局
- C++对象内存消耗
- 谷歌模拟全局模拟对象内存泄漏
- 静态工厂方法和静态对象内存泄漏
- 关于对象内存布局的假设
- 如果我在管理C++对象内存的目标 C 中混合C++代码,ARC 会处理它