子分配内存块

时间:2016-06-28 20:10:56

标签: c++ memory-management

我正在使用网络API,它将一条或多条消息的列表返回到我提供的缓冲区中。典型的缓冲区在返回时看起来像这样:

|B|message 1|S|message 2|S|message 3|E|

其中| B |是一个表示开头的字符,| S |是一个分隔符,| E |结束了。消息的长度和数量可以不同。我想要做的是遍历此缓冲区一次并将其拆分为(在本例中)3个组件消息,并将类似std::unique_ptr<char*>的内容发送到将处理每个单独消息的代码,并让unique_ptr采取照顾释放记忆。但我想这样做,不要将这些消息从缓冲区复制到较小的缓冲区中。

我是否可以使用一种技术,有效地将缓冲区子分配到新的较小的堆块中,并且仍然可以获得自动清理的好处?

1 个答案:

答案 0 :(得分:2)

没有&#34; suballocating&#34;缓冲区,至少对于大多数分配机制的实现(即堆)。

作为一个简单的解决方案,我建议您使用指向整个缓冲区的共享指针,以及找到的消息的指针(或偏移量)和大小。

就是这样的事情。

struct MsgPtr
{
    shared_ptr<Buffer> m_Buf;
    char* m_pMsg;
    size_t m_nMsgSize;
};

如果您不打算将已解析的消息长时间保留在内存中,这应该没问题。