■スレッドリストへ戻る■ 全部 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