• [^] # Re: Ça pique les yeux

    Posté par . En réponse au journal Mémorisation partielle de fonction constexpr. Évalué à 6. Dernière modification le 26 septembre 2018 à 18:13.

    Par exemple si j'écris 2 fois la ligne

    memoized<prime_sieve, uint64_t, 0,1,2,3,4,5,6,7,8,90> ps1;
    memoized<prime_sieve, uint64_t, 0,1,2,3,4,5,6,7,8,90> ps2;
    

    Est-ce qu'il va stocker 2 fois les résultats? Si ces lignes sont dans 2 librairies différentes, que ce passe t-il? (bien sûr qu'il va stocker 2 fois les résultats... )

    Le cache est statique, c'est donc la même variable partagée par tous les appels à une même fonction. Dans le cas où les types memoized sont identiques, le cache n'est pas recalculé. Mais si les types sont différents, les fonctions sont différentes, et donc, même avec des valeurs communes, le cache est complètement recalculé :

    memoized<prime_sieve, uint64_t, 0,1,2,3,4,5,6,7,8,90> ps1;
    memoized<prime_sieve, uint64_t, 0,1,2,3,4,5,6,7,8,90,91> ps2;
    

    ne partagent pas le même cache.