具有动态分配内存和映射内存的Shared_ptr
shared_ptr with dynamic allocated memory and with mmap-ed memory
对于我的项目,我使用shared_ptr
动态分配struct
。
在不同的点,我访问相同的struct
,但在映射的内存。
是否有一些技巧,我可以使用shared_ptr
,所以不重复现有的代码?例如,实际上不删除的自定义删除器?
我意识到这仍然是有风险的,但它将在很短的时间内完成-在函数体内,我不想复制整个结构体,只是为了在它上面运行一些简单的函数。
您可以使用std::shared_pointer
的别名构造函数:
std::shared_ptr shm; // points at mmap'ed region, with munmap deleter
Foo *p; // somewhere within this region
auto shared_p = std::shared_ptr{p, shm};
这将增加shm
的引用计数,而shared_p
是活的
经过一番研究,对于MMAP相关的案例,我做了一个不删除任何内容的自定义删除器。
static void null_deleter(void *){
// null_deleter
}
...
void abc(Blob *p){
mySharedPtr.reset(p, null_deleter);
}
查看boost进程间库,该库允许在内存中创建由mmap()创建的文件对象。它们有一些可重定位的指针,能够指向同一内存区域内的对象,并将该区域映射到不同的位置。不支持的是重新定位虚拟函数表——他们对此进行了讨论。但我认为这只适用于,如果您有不同版本的可执行文件或虚拟方法表位于共享库中。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 类型总是使用其大小存储在内存中吗
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存