'Programming/C&CPP'에 해당되는 글 3건

  1. Getting current time with millisecond 2010/07/10
  2. C++-style casts (2) 2008/10/23
  3. C++ Optimization 2008/03/08

현재 시간을 millisecond 단위로 가져오기

Linux

struct timeval time;
int res = gettimeofday(&time, 0);
return 1000 * time.tv_sec + (time.tv_usec / 1000);


Windows
FILETIME time;
__int64 msec;
GetSystemTimeAsFileTime(&time);
msec = time.dwHighDateTime;
msec <<= 32;
msec |= time.dwLowDateTime;
msec -= 116444736000000000ULL; // offset to the Linux epoch time
return msec / 10000;

2010/07/10 02:38 2010/07/10 02:38
Tag //

C++-style casts

from Programming/C&CPP 2008/10/23 16:15

const_cast<T>(expression)

dynamic_cast<T>(expression)

reinterpret_cast<T>(expression)

static_cast<T>(expression)

  • const_cast is typically used to cast away the constness of objects. It is the only C++-style cast that can do this.
  • dynamic_cast is primarily used to perform "safe downcasting," i.e., to determine whether an object is of a particular type in an inheritance hierarchy. It is the only cast that cannot be performed using the old-style syntax. It is also the only cast that may have a significant runtime cost.
  • reinterpret_cast is intended for low-level casts that yeld implementation-dependent (i.e., unportable) results, e.g., casting a pointer to an int. Such casts should be rare outside low-level code.
  • static_cast can be used to force implicit conversions (e.g., non-const object to const object, int to double, etc.). It can also be used to perform the reverse of many such conversions (e.e., void * pointers to typed pointers, pointer-to-base to pointer-to-derived), though it cannot cast from const to non-const objects. (Only const_cast can do that.)

출처: Effective C++, Third Edition

2008/10/23 16:15 2008/10/23 16:15
Tag //

C++ Optimization

from Programming/C&CPP 2008/03/08 01:49

C++ Optimization관련 글을 좀 읽어보고 공부해야 할 듯하다. 앞으로 일년간은 C/C++로 짜여진 코드의 성능을 향상시켜야 하는데, 로직이나 알고리즘을 바꿔서 성능 향상을 꾀할 수 있는 부분이 있는가 하면 언어적 특성을 고려하여 성능 향상을 꾀할 수 있는 부분도 있다. 예를 들면, 다음과 같은 코드가 있을 경우,

if ( error_case1 || error_case2 || error_case3 || error_case4 )
{
// error handling
}
else
{
// main routine
}

if 문 안에 여러 조건들이 있기 때문에 assembly code에서는 여러 jump 명령어를 사용하게 된다. 위 코드를 다음과 같이 바꾸면,

bool bIsNotError = !error_case1 && !error_case2 && !error_case3 && !error_case4;
if (bIsNotError)
{
// main routine
}
else
{
// error handling
}

if 문의 조건에 의한 여러 개의 jump 명령이 하나가 된다. 뿐만 아니라 에러 상황이 아닌 경우가 더 많으므로 main routine을 앞으로 오게 하여 좀 더 성능 향상을 꾀할 수 있다.

2008/03/08 01:49 2008/03/08 01:49