De nombreuses bibliothèques incluent un code crypto similaire à l'extrait suivant:Pourquoi ce code de mise à zéro n'est-il pas optimisé par la plupart des compilateurs c?
/* Implementation that should never be optimized out by the compiler */
static void optimize_proof_zeroize(void *v, size_t n)
{
volatile unsigned char *p = v;
while(n--) *p++ = 0;
}
Mais ma mise en œuvre naïve ne survit pas à un compilateur optimisé:
/* Naive zeroization implementation */
static void naive_zeroize(unsigned char *c, size_t n)
{
int i;
for(i = 0; i < n; i++)
c[i] = 0;
}
Le code est utilisé pour mettre à zéro les données sensibles avant de libérer la Mémoire. Étant donné que le tampon n'est pas utilisé à nouveau, les compilateurs d'optimisation supposent qu'ils peuvent supprimer en toute sécurité la zeriozation à partir du code compilé. Qu'est-ce qui empêche la première implémentation d'être optimisée?
Vous pouvez en savoir plus sur ([le qualificatif 'volatile'] http://en.cppreference.com/w/c/language/ volatil). –
Je ne vois aucune raison pour laquelle les extraits seraient optimisés. Vous pouvez peut-être [modifier] votre question pour inclure une description de la raison pour laquelle vous pensez que le deuxième extrait doit être optimisé. –