Skip to content

Instantly share code, notes, and snippets.

@tanakamura
Last active December 27, 2015 08:28
Show Gist options
  • Save tanakamura/7295977 to your computer and use it in GitHub Desktop.
Save tanakamura/7295977 to your computer and use it in GitHub Desktop.
printf
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *log_file;
int write_total;
char buffer[1024];
#ifdef _WIN32
#include <windows.h>
double
sec()
{
LARGE_INTEGER freq, v;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&v);
return v.QuadPart / (double)freq.QuadPart;
}
HANDLE log_file2;
#else
#include <sys/time.h>
#include <fcntl.h>
double
sec()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return tv.tv_sec + tv.tv_usec / 1000000.0;
}
int log_file2;
#endif
int
sum_digit(unsigned char *data, int w, int h)
{
int ret = 0;
int xi, yi;
for (yi=0; yi<h; yi++) {
for (xi=0; xi<w; xi++) {
ret += data[yi*w + xi];
//write_total += sprintf(buffer, "x=%d y=%d sum=%d\n", xi, yi, ret);
//write_total += fprintf(log_file, "x=%d y=%d sum=%d\n", xi, yi, ret);
//write_total += sprintf(buffer, "\n");
isdigit((char)ret);
//fputs("x=%d y=%d sum=%d\n", log_file);
//WriteFile(log_file2, "0123456789\r\n", 12, NULL, NULL);
}
}
return ret;
}
int
sum_sprintf(unsigned char *data, int w, int h)
{
int ret = 0;
int xi, yi;
for (yi=0; yi<h; yi++) {
for (xi=0; xi<w; xi++) {
ret += data[yi*w + xi];
write_total += sprintf(buffer, "x=%d y=%d sum=%d\n", xi, yi, ret);
}
}
return ret;
}
int
sum_fprintf(unsigned char *data, int w, int h)
{
int ret = 0;
int xi, yi;
for (yi=0; yi<h; yi++) {
for (xi=0; xi<w; xi++) {
ret += data[yi*w + xi];
write_total += fprintf(log_file, "x=%d y=%d sum=%d\n", xi, yi, ret);
}
}
return ret;
}
int
sum_fputs(unsigned char *data, int w, int h)
{
int ret = 0;
int xi, yi;
int len=strlen("x=%d y=%d sum=%d\n");
for (yi=0; yi<h; yi++) {
for (xi=0; xi<w; xi++) {
ret += data[yi*w + xi];
fputs("x=%d y=%d sum=%d\n", log_file);
write_total += len;
}
}
return ret;
}
int main(int argc, char **argv)
{
unsigned char *data;
int w = 640, h = 480;
int v;
double start, end;
int i;
if (argc >= 3) {
w = atoi(argv[1]);
h = atoi(argv[2]);
}
log_file = fopen("log.txt", "w");
data = malloc(w*h);
memset(data, 0, w*h);
for (i=0; i<4; i++) {
double dt;
const char *name = "??";
write_total = 0;
start = sec();
switch (i) {
case 0:
v = sum_fputs(data, w, h);
name = "fputs";
break;
case 1:
v = sum_sprintf(data, w, h);
name = "sprintf";
break;
case 2:
v = sum_fprintf(data, w, h);
name = "fprintf";
break;
case 3:
v = sum_digit(data, w, h);
name = "digit";
break;
}
end = sec();
dt = end-start;
printf("%10s: %d %d %d %e[sec] %e[sec/byte]\n", name, w, h, v, dt, dt/write_total);
}
fclose(log_file);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment