J'aime bien le inline avec le contrôle de type par le compilo & Co - je trouve ça plus propre que la définition de macros. Je me suis demandé quel coût avait le inline vs la définition de macro.
Testé avec le source suivant (sous Linux 64 bits, gcc 4.6.3).
// Fichier testinlinec.c#include <stdio.h>#include <stdint.h>#include <time.h>#include <limits.h>#define TESTSCOUNT 10000000staticuint8_tmapping[256];// Définition avec du inline.staticinlineuint8_tmafonction1(uint8_tv){returnv>UCHAR_MAX?0:mapping[v];}// Définition en macro.#define mafonction2(X) (X > UCHAR_MAX ? 0 : mapping[X])inlineuint64_trdtsc(){uint32_tlo,hi;__asm____volatile__("xorl %%eax, %%eax\n""cpuid\n""rdtsc\n":"=a"(lo),"=d"(hi)::"%ebx","%ecx");return(uint64_t)hi<<32|lo;}voidmain(void){inti;intx;uint64_tstart,end;uint64_ttinline,tmacro;// Initialisation du mapping avec des valeurs décalées.for(i=0;i<256;i++)mapping[i]=(i+8)%UCHAR_MAX;// Test avec le inline.start=rdtsc();for(i=0;i<TESTSCOUNT;i++)x=mafonction1(i%UCHAR_MAX)*2;end=rdtsc;tinline=end-start;printf("Inline: %lu\n",tinline);// Test avec la macro.start=rdtsc();for(i=0;i<TESTSCOUNT;i++)x=mafonction2(i%UCHAR_MAX)*2;end=rdtsc;tmacro=end-start;printf("Macro: %lu\n",tmacro);printf("Inline-Macro: %lu\n",tinline-tmacro);}
Le résultat dépend fortement de l'option de compilation choisie (je suppute que dans certains cas il n'inline pas). Sur ma machine (note: le temps est en nano-secondes):
[^] # Re: Une table
Posté par lolop (site web personnel) . En réponse au message Coût d'un accès mémoire.. Évalué à 3.
J'aime bien le inline avec le contrôle de type par le compilo & Co - je trouve ça plus propre que la définition de macros. Je me suis demandé quel coût avait le inline vs la définition de macro.
Testé avec le source suivant (sous Linux 64 bits, gcc 4.6.3).
Le résultat dépend fortement de l'option de compilation choisie (je suppute que dans certains cas il n'inline pas). Sur ma machine (note: le temps est en nano-secondes):
(note: avec des variations d'une exécution sur l'autre… vu la résolution c'est normal, les -O2 et -O3 sont quasi équivalent pour ce test)
Note: code pour le timing issu de stackoverflow.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN