2013-10-17 2 views
0

나는 날짜와 시간을 포함하는 커스텀 클래스를 만들고있다. 이 수업의 주요 목표는 최고의 성과를 달성하는 것입니다. 내 목표 플랫폼은 현재, 나는이다른 데이터 유형으로 최상의 성능을 얻으려면 어떻게해야합니까?

Year - int 
Month - int 
Day - int 
Hour- int 
Min - int 
Sec - double (because I need milisecs as well). 

형상 부재 나에게 2 + 1 + 1 + 1 + 1을 제공

Year - unsigned short 
    Month - unsigned char 
    Day - unsigned char 
    Hour- unsigned char 
    Min - unsigned char 
    Sec - unsigned char 
    Milisec - unsigned short 

을 다음과 유형을 변경 너무 내가 지금 생각하고하는 것은 유지 리눅스 입니다 + 1 + 2 = 9 바이트. 이미 추측했듯이 클래스를 8 바이트 (다른 ​​멤버가 없음)로 맞추고 싶습니다. 그렇다면이를 해결하고 병합 (예 : 초 및 밀리 초)하고 값 검색을 위해 비트 마스크를 사용하는 것이 가장 좋은 방법은 무엇입니까? 성능에 영향을 미칩니 까? 그리고 사용자가 정수를 일부 설정 자에게 전달하면 캐스트가 성능에 영향을 미칩니 까?

미리 감사드립니다.

+0

왜 8 바이트로 클래스에 맞게 하시겠습니까? – Raptor

+0

1900 년에서 2155 년까지만 필요한 경우 '서명되지 않은 문자'를 사용하십시오. – Zeta

+0

부동 소수점 산술 사용에 고유 한 문제로 인해 밀리 초를 별도의 정수 필드로 저장하는 것이 좋습니다. –

답변

2

여기에 여러 옵션이 있습니다. 가장 간단한 방법은 정수 타임 스탬프를 갖는 것입니다. 그것은 그것의 압축을 풀려면 약간의 처리가 필요합니다. 또 다른 옵션은 C++ 비트 필드를 사용하여 사물을 더 가깝게 포장하는 것입니다. 예를 들어, 월은 4 비트, 일 5 비트, 분 및 초 6 비트 만 필요합니다. 그것은 상황을 조금 더 천천히 만들어야하지만 이론적으로 만 가능합니다. 이 모든 날짜는 보유한 날짜의 수와 처리 할 금액 및 종류에 따라 다릅니다. 경우에 따라 struct이 비트 필드에 밀집되어 있으면 메모리 처리량이 향상되고 캐시 사용률이 높아져 성능이 향상됩니다. 다른 경우에는 비트 조작이 더 비쌀 수도 있습니다. 항상 성능과 마찬가지로 추측하지 않는 것이 더 좋지만, 측정 값은입니다.

0

여기서 가장 간단한 방법은 sec와 millisec 쌍을 하나의 int (2 바이트)에 넣는 것입니다. 0에서 60000까지의 숫자를 하나의 부호없는 short에 넣을 수 있기 때문에 별도의 Sec (부호없는 char)와 Milisec (부호없는 short)가 필요하지 않습니다.

milliSecPack (unsigned short)이라고 부릅시다.

milliSecPack = 60 * Sec + Milisec; 

그리고

Sec = milliSecPack/1000; 
Milisec = milliSecPack % 1000; 
관련 문제