Salut,
Oui, bien sur, qu'il y a moyen... il faut juste réfléchir "un tout petit peu"
Par exemple, n'as tu pas remarqué que la génération d'un uint32_t revient à générer deux uint16_t et à appliquer un décalage de bits sur l'un d'eux
Tu pourrais donc envisager de créer ton uint32_t sous une forme qui serait proche de
return static_cast<uint32_t>(RawRead16(arr[0])<<16 + rawRead16(arr[2]);
Ceci étant dit, il faut comprendre que le compilateur dispose de certains algorithmes qui lui permettent de déterminer s'il est plus intéressant de dérouler une boucle ou, au contraire, de créer une boucle sur base des manipulations qui sont effectuées. De manière générale, tu peux estimer que, si ces algorithmes ont fait que le compilateur a décidé de créer une boucle, c'est parce qu'il estimait (sur base de ses réglages actuels) que c'était la solution la plus adaptée. Et tu peux lui faire confiance sur ce coup
Avec Gcc, par exemple, on dispose d'un bon nombre d'options qui permettent de choisir la manière dont le code binaire sera généré. Le simple fait de passer d'une option -O à une option -O1 / -O2 / -O3 / -Os ou -Ofast aura très certainement une influence sur le choix effectué dans cette situation
Partager