티스토리 뷰
직렬화 버퍼를 구현하는 중에 Memcpy를 쓰는게 빠른지,
Shift 연산자로 대입하는 것이 좋은지 궁금해 이전에 제작했던 프로파일러를 통해 시간을 확인해 봤다.
Memcpy 코드
//넣기
CMessageBuffer& CMessageBuffer::operator <<(float fValue)
{
memcpy_s((m_chBuffer + m_iWritePos), m_iBufferSize, &fValue, 4);
m_iWritePos += 4;
return *this;
}
//빼기
CMessageBuffer& CMessageBuffer::operator >>(float& fValue)
{
memcpy(&(fValue), (m_chBuffer + m_iReadPos), 4);
m_iReadPos += 4;
return *this;
}
Shift 연산자 코드
//넣기
CMessageBuffer& CMessageBuffer::operator <<(int iValue)
{
//memcpy_s((m_chBuffer + m_iWritePos), m_iBufferSize, &iValue, 4 );
m_chBuffer[m_iWritePos++] = iValue;
m_chBuffer[m_iWritePos++] = iValue >> 8;
m_chBuffer[m_iWritePos++] = iValue >> 16;
m_chBuffer[m_iWritePos++] = iValue >> 24;
//m_iWritePos += 4;
return *this;
}
//빼기
CMessageBuffer& CMessageBuffer::operator >>(int& iValue)
{
iValue = *(m_chBuffer + m_iReadPos) + (*(m_chBuffer + (m_iReadPos + 1)) << 8) +
(*(m_chBuffer + (m_iReadPos + 2)) << 16) + (*(m_chBuffer + (m_iReadPos + 3)) << 24);
m_iReadPos += 4;
return *this;
}
Test 코드
void Test1()
{
float fVal = 0.1f;
float fOut;
PRO_BEGIN(L"Memcpy");
for (int j = 0; j < 1000; j++)
{
_buffer << fVal;
_buffer >> fOut;
}
PRO_END(L"Memcpy");
}
void Test2()
{
int iVal = 10;
int iOut;
PRO_BEGIN(L"Shift");
for (int j = 0; j < 1000; j++)
{
_buffer << iVal;
_buffer >> iOut;
}
PRO_END(L"Shift");
}
////
main()
for (int i = 0; i < 1000; i++)
{
Test1();
}
_buffer.Clear();
for (int j = 0; j < 1000; j++)
{
Test2();
}
결과
Max값은 10에 1번 정도는 Shift가 가끔 높게 나올 때가 있다.
하지만 평균치는 항상 일정하게 20마이크로 세컨드 정도 더 빠르다.
shift 연산자가 보기에는 더 불편해도 쓸 수 있으면 shift 연산자를 쓰는게 더 좋다는 결과가 나왔다.
'네트워크' 카테고리의 다른 글
브라우저가 서버와 통신을 하는 과정 (1) (0) | 2022.01.16 |
---|---|
[성실패-네트워크 원리] Chapter 1 HTTP 리퀘스트 메시지를 작성한다 (0) | 2020.06.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 기초
- 선택자
- C언어
- javascript
- visual studio code
- Link
- 생활코딩#MySQL
- css
- 언리얼엔진4
- HTML
- 정렬
- 관계형데이터베이스
- 동영상을
- TAG
- GRID
- php
- inline
- 생활코딩
- 안드로이드 스튜디오
- 변수
- 글로
- 조건문
- 문자열
- 알고리즘
- 생활코딩#동영상을#글로#html
- 네트워크 프로그래밍
- 객체
- 차이점
- PHP&MySQL
- 언리얼엔진
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함