Ввиду того, что я так и не получил вразумительного ответа тут: http://www.linux.org.ru/view-message.jsp?msgid=1561742 решил провести самостоятельное тестирование. Если есть возможность - протестируйте на своей платформе.
Сначала о платформе, на которой эти тесты проводились:
- CPU: AMD Athlon Thunderbird 850@977 (1956 bogomips);
- RAM: 256Mb PC133@115;
- HDD: 80Gb 7200rpm 8Mb WDC WD800BB-00JHA0 (fw: 05.01C05).
- OS: Slackware Linux 10.2+current;
- KERNEL: 2.6.17 (с www.kernel.org).
Список процессов (не ядерных) перед тестированием:
1215 ? Ss 0:00 /usr/sbin/syslogd
1218 ? Ss 0:00 /usr/sbin/klogd -c 3 -x
1300 ? Ss 0:00 /usr/sbin/gpm -m /dev/mouse -t imps2
1397 tty1 Ss 0:00 -bash
21639 tty1 S+ 0:00 \_ /usr/bin/mc -P /tmp/mc-root/mc.pwd.1397
21640 ? Ss 0:00 \_ cons.saver /dev/vc/1
21641 pts/0 Ss 0:00 \_ bash -rcfile .bashrc
22279 pts/0 R+ 0:00 \_ ps axf
1399 tty3 Ss+ 0:00 /sbin/agetty 38400 tty3 linux
21569 tty2 Ss 0:00 -bash
21589 tty2 S+ 0:00 \_ mcedit /tresult.txt
21590 ? Ss 0:00 \_ cons.saver /dev/vc/2
#include <limits.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main() {
FILE *test;
time_t t1, t2;
char tbuf[8192] = "\000";
int i = 0;
double d1 = 32768.0;
double d2 = 111111111111.0;
double d3 = 22222222222222222222222.0;
char *s1 = "s1";
char *s2 = "s2mid";
char *s3 = "s3 very-very long";
short int si1 = 1;
short int si2 = 256;
short int si3 = 32765;
int i1 = 1;
int i2 = 65536;
int i3 = 1122334455;
char c1 = '1';
char c2 = '[';
char c3 = '\n';
test = fopen("/testfile", "w");
t1 = time(NULL);
while (i++ < 8000001) {
/* 1: sprintf+fputs
sprintf(tbuf, "%c %hd %d <t1> %'.0f %c <text2> %s %d %s <middle text3> %hd %c %'.0f %d %s %'.0f %hd",
c1, si1, i1, d1, c2, s1, i2, s2, si2, c3, d2, i3, s3, d3, si3);
fputs(tbuf, test);*/
/* 2: sprintf+fwrite
sprintf(tbuf, "%c %hd %d <t1> %'.0f %c <text2> %s %d %s <middle text3> %hd %c %'.0f %d %s %'.0f %hd",
c1, si1, i1, d1, c2, s1, i2, s2, si2, c3, d2, i3, s3, d3, si3);
fwrite(tbuf, strlen(tbuf), 1, test);*/
/* 3: fprintf
fprintf(test, "%c %hd %d <t1> %'.0f %c <text2> %s %d %s <middle text3> %hd %c %'.0f %d %s %'.0f %hd",
c1, si1, i1, d1, c2, s1, i2, s2, si2, c3, d2, i3, s3, d3, si3);*/
/* 4: 15x fprintf
fprintf(test, "%c ", c1);
fprintf(test, "%hd ", si1);
fprintf(test, "%d ", i1);
fprintf(test, "<t1> %'.0f ", d1);
fprintf(test, "%c ", c2);
fprintf(test, "<text2> %s ", s1);
fprintf(test, "%d ", i2);
fprintf(test, "%s ", s2);
fprintf(test, "<middle text3> %hd ", si2);
fprintf(test, "%c ", c3);
fprintf(test, "%'.0f ", d2);
fprintf(test, "%d ", i3);
fprintf(test, "%s ", s3);
fprintf(test, "%'.0f ", d3);
fprintf(test, "%hd", si3);*/
/* 5: 15x sprintf+1x fwrite */
sprintf(tbuf, "%c ", c1);
sprintf(&tbuf[strlen(tbuf)], "%hd ", si1);
sprintf(&tbuf[strlen(tbuf)], "%d ", i1);
sprintf(&tbuf[strlen(tbuf)], "<t1> %'.0f ", d1);
sprintf(&tbuf[strlen(tbuf)], "%c ", c2);
sprintf(&tbuf[strlen(tbuf)], "<text2> %s ", s1);
sprintf(&tbuf[strlen(tbuf)], "%d ", i2);
sprintf(&tbuf[strlen(tbuf)], "%s ", s2);
sprintf(&tbuf[strlen(tbuf)], "<middle text3> %hd ", si2);
sprintf(&tbuf[strlen(tbuf)], "%c ", c3);
sprintf(&tbuf[strlen(tbuf)], "%'.0f ", d2);
sprintf(&tbuf[strlen(tbuf)], "%d ", i3);
sprintf(&tbuf[strlen(tbuf)], "%s ", s3);
sprintf(&tbuf[strlen(tbuf)], "%'.0f ", d3);
sprintf(&tbuf[strlen(tbuf)], "%hd", si3);
fwrite(tbuf, strlen(tbuf), 1, test);
}
t2 = time(NULL);
fprintf(stderr, "TIME ELAPSED: %d\n", (int)(t2 - t1));
fclose(test);
return 0;
}
В следующих сообщениях отпишу по каждому алгоритму полученные результаты, m16/a256 - это параметры hdparm.
Ответ на:
комментарий
от saper
Ответ на:
комментарий
от saper
Ответ на:
комментарий
от sS
Ответ на:
комментарий
от saper
Ответ на:
комментарий
от sS
Ответ на:
комментарий
от saper
Ответ на:
комментарий
от sS
Ответ на:
комментарий
от saper
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Странный результат деления (2014)
- Форум Помогите разобраться с sendmsg & recvmsg. (2013)
- Форум Пропадают строки при многопоточной записи в stdout и перенаправлении вывода (2011)
- Форум socket with function mysql (2009)
- Форум Не могу победить TIME_WAIT, как закрывать сокеты? (2010)
- Форум Простой вопрос знатокам в СИ (2015)
- Форум Исследование производительности VM (2018)
- Форум Перенаправить вывод printf (2007)
- Форум WebSocket-сервер (2016)
- Форум Производительность ввода/вывода (2007)