Ist Java viel schneller als C... in manchen Dingen

Hallo,
ich sage es mal diplomatisch so: Man kann fast jedes Programm in jeder Programmiersprache langsamer machen. Und es kommt auf den Compiler an.

Ohne libc-Routinen läuft Dein Programm bei mir statt in 89 Sekunden in 21. Den Algorithmus noch durch ein Radix-Search ersetzt in 10 Sekunden. Die Java-Variante (IBM Semeru)

Version    gcc-7  icc-11  semeru
original      97      89      21
nolibc        22      19      21
radix         16      10      16

Hier der Radix-Code:

#include <stdio.h>
#include <stdint.h>

static int
repeats(size_t i)
{
    unsigned char counter[10U] = {0};
    do {
            if (counter[(i % 10U)]++ >= 1U) {
                    return 0;
            }
    } while (i /= 10U);
    return 1;
}

int main() {
    int counter = 0; // zaehlt Zahlen ohne Wiederholungen von Ziffern in der Zahl

    for (size_t i=1000; i<999999999; ++i) {
            counter += repeats(i);
    }
    printf("%d\n\r", counter);
    return 0;
}
3 „Gefällt mir“