■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 最新50

read.cgi改良スレッド 2

167 :デフォルトの名無しさん :01/09/11 09:36
zlibのを使うのなら crc32よりadler32の方が軽いみたい

% time ./test adler32
adler32 = c23cf731
1.18u 0.00s 0:01.14 103.5%
% time ./test crc32
crc32 = 7949b790
5.34u 0.01s 0:05.31 100.7%
% cat test.c
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <zlib.h>

#define FACTOR 65536

int
main(int argc, char *const *argv)
{
 if (argc < 2) fprintf(stderr, "Usage: %s function\n", *argv);
 else if (!strcmp("adler32", argv[1]) || !strcmp("crc32", argv[1])) {
  int i, fd = open(*argv, O_RDONLY);
  void *mmptr;
  uLong val;
  struct stat st;
  uLong (*fn32)(uLong, const Bytef *, uInt) = !strcmp("crc32", argv[1])?crc32:adler32;
  if (fd < 0) return -1;
  fstat(fd, &st);
  mmptr = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
  if (mmptr == MAP_FAILED) {close(fd); return -1;}
  for (i = 0; i < FACTOR; i++)
   val = fn32(fn32(0, NULL, 0), mmptr, st.st_size);
  munmap(mmptr, st.st_size);
  close(fd);
  printf("%s = %lx\n", argv[1], val);
 }
 else fprintf(stderr, "%s: Illegal function.\n", *argv);
 return 0;
}

326KB
新着レスの表示

スレッドリストへ戻る 全部 前100 次100 最新50

0ch BBS 2004-10-30