2016-06-28 4 views
0

내가 제공하는 버퍼에 하나 이상의 메시지 목록을 반환하는 네트워크 API로 작업하고 있습니다. | B |메모리 블록 할당을

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

: 일반적인 버퍼가 돌아 오면 다음과 같습니다 시작을 나타내는 문자입니다. | S | 구분 기호이며 | E | 끝이다. 메시지의 길이와 번호는 다양 할 수 있습니다. 내가 뭘하고 싶은지,이 버퍼를 한 번 이동하여 (이 경우) 3 개의 구성 요소 메시지로 분할하고 std::unique_ptr<char*> 같은 코드를 각각의 개별 메시지를 처리하는 코드로 보내고 unique_ptr이 해당 버퍼를 해제하도록합니다. 기억. 그러나 나는이 메시지를 그들의 버퍼에서 작은 메시지로 복사하지 않고 그렇게하고 싶습니다.

버퍼를 새로운 작은 힙 블록에 효과적으로 할당하고 자동 정리의 이점을 얻는 데 사용할 수있는 기술이 있습니까?

+1

새 게재 위치를 찾으십시오. –

답변

3

적어도 대부분의 할당 메커니즘 (즉, 힙)의 구현에는 버퍼를 "하위 할당"하는 것과 같은 것이 없습니다.

단순한 해결책으로, 공유 포인터와 전체 버퍼 포인터, 발견 된 메시지의 포인터 (또는 오프셋) 및 크기를 함께 사용하는 것이 좋습니다.

즉, 이와 같은 것입니다.

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

오랫동안 구문 분석 된 메시지를 메모리에 보관하지 않으려면이 작업을 수행해야합니다.

+0

이것은 좋은 생각입니다. 더 나아가서 shared_ptr의 생성자 양식 (8)이 내가 필요한 것을 할 수 있는지 궁금합니다. http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr –

관련 문제