Люблю делать всякие сравнения компиляторов.
Сегодня на ринге Студия 2010, lcc и tcc. Все три я активно использую под Windows для языка С.
Сравнивать будем на любимом решете Эратосфена (erato-c-int.c):
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <math.h>
int main(int argc, char* argv[]) {
int n = argc > 1 ? atoi(argv[1]) : 100;
int* S;
int count;
int sz = n * sizeof(*S);
int i, j;
long sqrt_n = sqrt(n) + 1;
printf("%d\n", n);
S = malloc(sz);
memset(S, 0, sz);
for (i = 2; i < sqrt_n; ++i)
if (S[i] == 0)
for (j = i*i; j < n; j+=i)
S[j] = 1;
count = 0;
for (i = 2; i < n; ++i)
if (S[i] == 0)
count++;
printf("%d\n", count);
free(S);
return 0;
}
Скрипт для запуска (Makefile):
SRC=erato-c-int
N=100000000
all: build run
build: build-cl build-lcc build-tcc
run: run-cl run-lcc run-tcc
build-cl:
@cl /nologo /O2 -Fe$(SRC)-cl.exe $(SRC).c
run-cl:
@echo ---
-@cl 2>&1 | findstr Compiler
@ntimer.exe $(SRC)-cl.exe $(N) | findstr ETime
build-lcc:
@c:\lcc\bin\lcc -O2 -o $(SRC)-lcc.obj $(SRC).c
@c:\lcc\bin\lcclnk -o $(SRC)-lcc.exe $(SRC)-lcc.obj
run-lcc:
@echo ---
@c:\lcc\bin\lcc -v
@ntimer.exe $(SRC)-lcc.exe $(N) | findstr ETime
build-tcc:
@c:\tcc\tcc -O2 -o $(SRC)-tcc.exe $(SRC).c
run-tcc:
@echo ---
@c:\tcc\tcc -v
@ntimer.exe $(SRC)-tcc.exe $(N) | findstr ETime
Погнали:
--- Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 ETime( 0:00:04.374 ) UTime( 0:00:04.196 ) KTime( 0:00:00.124 ) --- Logiciels/Informatique lcc-win32 version 3.8. Compilation date: Jan 29 2011 11:51:05 ETime( 0:00:04.415 ) UTime( 0:00:04.102 ) KTime( 0:00:00.202 ) --- tcc version 0.9.25 ETime( 0:00:04.944 ) UTime( 0:00:04.492 ) KTime( 0:00:00.280 )
Вывод не особо захватывающий. Все выступили примерно одинаково.
Посты по теме:
Комментариев нет:
Отправить комментарий