La STL est-elle adaptée pour du code critique en termes de performance ?
[Fork suite à cette discussion : Matrice de booleen ]
Citation:
Envoyé par
Joel F
c'est deja ce que fait std::bitset<N> si je ne m'abuse:
<snip>
sachant que bitset::operator[] fait aussi la tambouille pour extraire le booleen compressé.
Oui, mais c'est de la STL. En fonction de l'implémentation (donc, du compilateur) et des optimisations activées, cela peut être nettement moins bon que le code "en dur". La STL est très souvent la meilleure implémentation générique d'un algo.
Mais étant génériques, par définition, ces objets possèdent du code "inutile" dans certains cas... Ce qui permet de battre en vitesse et/ou en occupation mémoire les containers STL avec des implémentations spécifiques, lorsque les besoins l'exigent.
On perd bien sûr en maintenabilité / évolutivité ce que l'on gagne en performances / consommation mémoire, c'est une évidence, mais tout dépend si l'on a besoin (ou pas !) des performances optimales.
La STL est-elle adaptée pour du code critique en termes de performance ?
Citation:
Envoyé par
Mac LAK
Oui, mais c'est de la STL. En fonction de l'implémentation (donc, du compilateur) et des optimisations activées, cela peut être nettement moins bon que le code "en dur". La STL est très souvent la meilleure implémentation générique d'un algo.
bitset::operator[] ne fait rien d'aure qu'un masquage de bit chez genre tout le monde ... Et encore une fois, moi avant de faire un truc chiant à la main, je le fait avec l'outil sur étagère et je bench et j'avise. Pas l'inverse.
Citation:
Envoyé par
Mac LAK
On perd bien sûr en maintenabilité / évolutivité ce que l'on gagne en performances / consommation mémoire, c'est une évidence, mais tout dépend si l'on a besoin (ou pas !) des performances optimales.
On perd surtout du temps. On n'est plus en 1650, les compilos et les machine sont évoilués et à part pour de l'embarqué exotique, ne pas utilisez la STL pour des trucs si simples que bitset c'est vraiment aimer perdre son temps.