• [^] # Re: Bienvenue dans mon monde

    Posté par . En réponse au journal C23: un memset_explicit() qui carbure. Évalué à 4.

    C'est confirmé sur ce code :

    // gcc -O2 -S test_memset.c
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    void *memset_explicit(void * s, int c, size_t n);
    int main(int argc, char * argv[])
    {
     char * buf = NULL;
     unsigned checksum;
     char * p;
     if (argc < 2)
     {
     printf("Please add a parameter (any word)\n");
     return 1;
     }
     buf = (char *) malloc((strlen(argv[1])+1)*sizeof(char));
     if (!buf) return 2;
     strcpy(buf, argv[1]);
     checksum = 0;
     p=buf;
     while (*p)
     {
     checksum += *p;
     p++;
     }
     printf("checksum = %u\n", checksum);
     memset_explicit(buf, 0, strlen(buf));
     free(buf);
     return 0;
    }
    #pragma GCC push_options
    #pragma GCC optimize ("-O0")
    void *memset_explicit(void * s, int c, size_t n)
    {
     memset(s, c, n);
    }
    #pragma GCC pop_options

    Si on commente le pragma GCC optimize, l'appel à memset disparaît de l'assembleur, et c'est à partir de O2 sur ma version de GCC (standard Debian 12).

    Les vrais naviguent en -42