컴퓨터 엑셀 워드 포토샵 구글어스 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 Function

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가 알아서, 중복되는 코드를 제거하고 자동으로 최적화해 준 것 같습니다.

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


2 Comments:
At March 14, 2018 at 11:24 AM, Blogger 논타겟 said...

질문이 있는데요. 기가단위 파일을 사용해서

그냥 속도를 빠르게 하기위하여 바이트 읽는 크기를 1메가 정도로 그냥 사용해도 되는건가요??

 
At March 14, 2018 at 12:35 PM, Blogger mwultong said...


위의 소스 코드에서는 32768 바이트씩 파일을 읽습니다.

제가 4기가짜리 파일로 테스트해 본 결과,

버퍼 크기를 100메가쯤으로 늘린다고 해도 속도가 전혀 빨라지지 않았습니다.


그러나 초대용량 파일을 주로 다루신다면, 버퍼 크기를 수십 메가쯤으로 늘리는 것도 좋을 듯합니다.


결론은, 그냥 사용하셔도 괜찮습니다. 속도 차이를 체감할 수 없습니다.

 

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