컴퓨터 엑셀 워드 포토숍 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Previous Post 포토샵 강좌] 포토샵이란? 포토숍 용도, 토토샵 기능; Adobe Photoshop사진으로 그림 효과 내기, 포토샵 필터로 회화적 효과 만들기; Photoshop Paint...엑셀, 셀 이름(Excel Cell Name) 지정/추가/삭제 방법; 라벨/이름표 Add ...C언어] 숫자를 문자(char)로 변환, Number to CharacterC언어] 숫자를 문자(문자열)로 변환, Number to StringPython/파이썬] 숫자를 문자열로 변환, 정수(int), 실수(float)를 문자로; ...Python/파이썬] 문자열을 숫자로 변환; 문자를 정수(int, long), 실수(flo...C언어 VC++] 컴퓨터 환경변수 구하기/출력 방법; Get-Print Environmen...Python/파이썬] 환경변수 구하기, 출력 os.environ; Get-Print Env...Python/파이썬] 함수 정의 방법, 함수 인수(파라미터), 반환값; def Functi...

C언어] CRC32 구하기 버전업 (코드 최적화): CRC32.cpp

Sunday, January 07, 2007

예전에 올린 CRC 계산 소스에서 불합리한 부분을 고쳤습니다. makeCRCtable() 함수로 테이블을 계속 만들게 되어 있었는데, 마조리카님께서 지적해 주신대로 한번만 만들게 했습니다.

2번째 소스 파일인 CRC32.cpp 만 업데이트하면 됩니다. 다른 부분은 여기에 있는 것과 같습니다: ▶▶ [C언어] 비주얼C로, 파일의 CRC32 값 구하기 (빠르고 메모리 점유 없이)


새 버전 소스 파일


파일명: CRC32.cpp
unsigned long getFileCRC(FILE *);
unsigned long calcCRC (const unsigned char *, signed long, unsigned long, unsigned long *);
void makeCRCtable(unsigned long *, unsigned long);




unsigned long getFileCRC(FILE *s) {
  unsigned char buf [32768];
  unsigned long CRC = 0;
  unsigned long table[256];
  size_t len;


  makeCRCtable(table, 0xEDB88320);

  while ( (len = fread(buf, 1, sizeof(buf), s)) != NULL )
    CRC = calcCRC(buf, (unsigned long) len, CRC, table);

  return CRC;
}


unsigned long calcCRC(const unsigned char *mem, signed long size, unsigned long CRC, unsigned long *table) {
  CRC = ~CRC;

  while(size--)
    CRC = table[(CRC ^ *(mem++)) & 0xFF] ^ (CRC >> 8);

  return ~CRC;
}


void makeCRCtable(unsigned long *table, unsigned long id) {
  unsigned long i, j, k;

  for(i = 0; i < 256; ++i) {
    k = i;
    for(j = 0; j < 8; ++j) {
      if (k & 1) k = (k >> 1) ^ id;
      else k >>= 1;
    }
    table[i] = k;
  }
}


그런데 저의 경우, 최적화한 소스와, 최적화하지 않은 소스의 속도 차이는 전혀 없더군요.

비주얼C 컴파일러의 속도 최적화 옵션을 켠 상태이기 때문에, 비주얼C가 알아서, 중복되는 코드를 제거하고 자동으로 최적화해 준 것 같습니다.

속도가 느렸다면, 제가 눈치채고 고쳤을 텐데, 그렇지 않아서 제가 최적화를 간과하고 말았습니다^^;


0 Comments:

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Categories
Previous Posts
Monthly Archives
Top