728x90
이미 공개했던 BYTE Stream 이 워낙에 new delete 를 자주 호출 하는 관계로 메모리 단편화의 문제가 생길 수 있을 것 같아
(속도 차는 측정해본 결과 몇 개의 변수 추가로는 0.0015 ~ 6 정도로 차이는 없었음) 이 참에 겸사겸사 boost::pool 을 적용
보았습니다. 전 버전과 틀려진 점은 pool 에서 자동 소멸 기능이 지원되기 때문에 최종적 BYTE* 를 받을 때 스마트 포인터로
안받고 직접적으로 호출을 했다는 점 입니다. 가독성은 떨어지게 됐는데 전 버전과 비교해보면 알 수 있을 겁니다
참고 사이트 : http://www.boost.org/doc/libs/1_47_0/libs/pool/doc/interfaces.html
참고 예제 소스 - 클레스
#define _BUFF_SIZE 128 enum ePacketIndex { eNone = 0, eSample, }; class CByteStream { // http://www.boost.org/doc/libs/1_47_0/libs/pool/doc/interfaces.html boost::pool<> m_pool; BYTE* m_pData; int m_nSize; public: BYTE* GetData() { return m_pData; } int size() { return m_nSize; } template<class T> void AddValue(T t) { int nLoc = m_nSize; int newSize = 0; if(m_pData == NULL) { newSize = sizeof(T); m_pData = (BYTE*)m_pool.ordered_malloc(newSize); std::cout << "Send Data "; } else { newSize = m_nSize + sizeof(T); BYTE* pTemp = (BYTE*)m_pool.ordered_malloc(newSize); std::copy(m_pData, m_pData+nLoc, pTemp); // or std::copy(); m_pool.ordered_free(m_pData); m_pData = (BYTE*)m_pool.ordered_malloc(newSize); std::copy(pTemp, pTemp+newSize, m_pData); // or std::copy(); m_pool.ordered_free(pTemp); } *(T*)(m_pData + nLoc) = (t); std::cout << t << ", "; m_nSize = newSize; } void AddString(std::string s) { } CByteStream(int nMsgIndex) : m_pool(sizeof(_BUFF_SIZE)) { m_pData = NULL; m_nSize = 0; AddValue(nMsgIndex); } };
참고 예제 소스 - 사용
void foo() { CByteStream Msg((int)eSample); Msg.AddValue(3.14f); Msg.AddValue(true); Msg.AddString("나는 꼼수다"); Msg.AddString("Test : check"); std::cout << std::endl; boost::asio::mutable_buffer buf = boost::asio::buffer(Msg.GetData(), _BUFF_SIZE); boost::system::error_code error; int len = boost::asio::write(m_Socket, boost::asio::buffer(buf, Msg.size()), error); // ... }
728x90
'프로그래밍 > boost' 카테고리의 다른 글
boost::thread / boost::thread_group (0) | 2011.11.08 |
---|---|
ByteStream / CallbackMrg (0) | 2011.11.05 |
boost::function 으로 callback map 만들기 (0) | 2011.11.03 |
boost::asio::buffer (0) | 2011.10.28 |
boost::asio 비동기 TCP + echo 서버 / 클라이언트 (6) | 2011.10.27 |
댓글