子分配内存块
Suballocating memory block
我正在使用一个网络API,该网络API将1个或多个消息列表返回我提供的缓冲区。返回时典型的缓冲区看起来像这样:
|B|message 1|S|message 2|S|message 3|E|
其中| b |是指示开始的角色,| s |是一个分离器,| e |是结局。消息的长度和数字可能不同。我想做的是遍历此缓冲区一次,然后将其分为(在这种情况下)3个组件消息,然后将类似std::unique_ptr<char*>
的内容发送到将处理每个单独消息的代码,并让unique_ptr负责释放记忆。但是我想这样做,而不会将这些消息从缓冲区和较小的消息中复制出来。
我可以有效地使用一种技术,将缓冲区分配到新的较小的堆块中,并且仍然可以从自动清理中受益?
至少对于大多数分配机制的实现(即堆)。
作为一个简单的解决方案,我建议您使用共享指向整个缓冲区的指针,加上指针(或偏移)和发现消息的大小。
就是这样。
struct MsgPtr
{
shared_ptr<Buffer> m_Buf;
char* m_pMsg;
size_t m_nMsgSize;
};
,如果您不打算将解析的消息保持长时间。
相关文章:
- 自己的自定义向量类. 内存重新分配
- 如何从内存中分配GDI+ POINT类地址?
- 如何通过接口将函子分配给函数对象
- 如何使用 std::vector 防止内存重新分配
- 为什么分配堆内存比分配堆栈记忆更快
- C 内存地址分配
- 对内存动态分配的类不使用"*"的逻辑
- 在共享内存上分配原子
- C 中的内存模型:为什么在同一内存位置分配了结构中的两个整数
- 内存池分配
- 在内存中分配多个结构
- C++类数组内存重新分配
- 使用 boost::interprocess 在共享内存中分配用户定义的结构
- 关于指针和数组以及它们在C++中如何在内存中分配
- 在虚拟内存中分配大型类C
- 子分配内存块
- 如果我将内存动态分配给静态变量,我应该释放它还是会自动释放它
- 如何使用boost :: intercons :: vector在共享内存中分配复杂的结构
- 如何在共享内存中分配 CGAL 的半边结构?
- 当内存被分配到Windows中的进程中时,它总是会触发页面错误,这是真的吗