• # Remarques

    Posté par . En réponse au message [requete]Test de mémoire sur une machine 64 bits. Évalué à 1.

    void aff(unsigned int adr, int sz)
    /* .... */
    int main(void)
    {
    int t1;
    short t2;
    long t3;
    long long t4;
    char t5;

    aff((unsigned long)&t1,sizeof(int));
    aff((unsigned long)&t2,sizeof(short));
    aff((unsigned long)&t3,sizeof(long));
    aff((unsigned long)&t4,sizeof(long long));
    aff((unsigned long)&t5,sizeof(char));
    return 0;
    };

    Un cast d'un pointeur vers un type unsigned long n'est pas garanti par la norme, il peut y avoir des pertes. Par contre, le type uintptr_t (si je ne m'abuse, vérifie dans la norme) est fait pour convertir sans perte (ou avec le minimum de perte ?) une valeur entre les type pointeur et entier.

    De plus, tu castes en unsigned long, alors que ta fonction attend un unsigned int...?

    Par ailleurs, sizeof renvoie un size_t, et je ne croie pas que ce type ait forcément un domaine de valeurs inclut dans celui de int. Il pourraît être plus grand, si par exemple int fait 32 bits et qu'on peut allouer des objets dont la taille est plus grosse que 2^32 bits.

    Ok, tu n'as montré ici qu'un code "juste pour tester", pas l'appli complète. Mais en te faisant les remarques ici, ça pourra peut-être éviter que les mêmes choses arrivent dans l'appli...

    Pour compléter mon post juste au-dessus, je ne dis pas que connaître l'adressage et alignement mémoire n'est pas nécessaire dans ton cas, mais juste que, si tu peux arriver à coder ce que tu veux sans avoir à faire ce genre de tests, c'est plus sûr (et plus portable). Mais tu dois déjà être au courant...