Au fait, j'ai fait un petit essai avec une petite fonction qui prend deux entiers et retourne leur somme:
en C:
int function (int a, int b)
{
return a + b;
}
en Java:
public static int function (int a, int b)
{
return a + b;
}
sur x86, je compile avec optimisations (-O3 -fomit-frame-pointer) et j'obtiens:
0: 8b 44 24 08 mov 0x8(%esp),%eax
4: 03 44 24 04 add 0x4(%esp),%eax
8: c3 ret
soit 9 octets (11 octets avec -O2)
Le ByteCode Java est:
0: iload_0
1: iload_1
2: iadd
3: ireturn
soit 4 octets (on mets les deux parametres sur la pile, on les additionne et on retourne le sommet de la pile).
Ici, il y a un rapport environ de 2 en faveur du ByteCode. Bon ce n'est qu'un exemple, et je ne dis pas que c'est toujours comme ca hein.
J'ai essayé avec la fonction factorielle codée recursivement et j'obtiens un rapport presque de 14 avec -O3 (gloups), plus que 3 avec -O0 et presque 2 avec -O2. Je n'ai pas cherché a faire un truc super-optimisé, mais juste un petit programe classique.
Une fois translaté en langage machine, il n'est pas deraisonnable de penser que le ByteCode occupera au moins la taille occupée par un code equivalent écrit en C, donc le fait que ca soit plus compact n'a pas forcement toujours un interet.
[^] # Re: seul compilateur objet au monde à réaliser une analyse de flot ?
Posté par crumpet . En réponse à la dépêche Lisaac 0.12 en GPL v3. Évalué à 1.
en C:
int function (int a, int b)
{
return a + b;
}
en Java:
public static int function (int a, int b)
{
return a + b;
}
sur x86, je compile avec optimisations (-O3 -fomit-frame-pointer) et j'obtiens:
0: 8b 44 24 08 mov 0x8(%esp),%eax
4: 03 44 24 04 add 0x4(%esp),%eax
8: c3 ret
soit 9 octets (11 octets avec -O2)
Le ByteCode Java est:
0: iload_0
1: iload_1
2: iadd
3: ireturn
soit 4 octets (on mets les deux parametres sur la pile, on les additionne et on retourne le sommet de la pile).
Ici, il y a un rapport environ de 2 en faveur du ByteCode. Bon ce n'est qu'un exemple, et je ne dis pas que c'est toujours comme ca hein.
J'ai essayé avec la fonction factorielle codée recursivement et j'obtiens un rapport presque de 14 avec -O3 (gloups), plus que 3 avec -O0 et presque 2 avec -O2. Je n'ai pas cherché a faire un truc super-optimisé, mais juste un petit programe classique.
Une fois translaté en langage machine, il n'est pas deraisonnable de penser que le ByteCode occupera au moins la taille occupée par un code equivalent écrit en C, donc le fait que ca soit plus compact n'a pas forcement toujours un interet.