Que signifie “_atsortingbute _ ((aligné (4))); ‘ dans la première ligne?

char buf[BUF_LEN]_atsortingbute_((aligned(4))); ssize_t len, i = 0; /* read BUF_LEN bytes' worth of events */ len = read (fd, buf, BUF_LEN); /* loop over every read event until none remain */ while (i wd, event->mask, event->cookie, event->len, (event->mask & IN_ISDIR) ? "yes" : "no"); /* if there is a name, print it */ if (event->len) printf ("name=%s\n", event->name); /* update the index to the start of the next event */ i += sizeof (struct inotify_event) + event->len; } 

 char buf[BUF_LEN]_atsortingbute_((aligned(4))); 

Il spécifie un alignement minimal pour la variable buf , mesuré en octets.
Cela oblige le compilateur à allouer la variable buf sur une limite de 4 octets.

Cela devrait être une bonne lecture.

Ceci aligne la mémoire allouée à buf sur une limite de 4 octets. Cela peut notamment accélérer les transferts de mémoire entre le processeur et la mémoire principale.

L’instruction demande au compilateur de placer le tampon sur une adresse multiple de quatre octets.

Sur certains processeurs, cela n’a aucun effet, sur d’autres processeurs, il accélère l’access à la mémoire si vous ne lisez pas un seul octet à la fois, mais plutôt 2, 4 ou 8 (16, 32 et 64 bits) et sur certains processeurs, est même nécessaire pour un access de 2, 4 ou 8 octets (sinon, une erreur de bus se produit).

Dans ce cas, cela est en effet pertinent puisque la mémoire tampon est ultérieurement accessible en tant que série de structures inotify_event , qui contiennent des membres auxquels on a access en tant que valeurs de 16, 32 ou 64 bits.