Comme il existe peu de projets C++ et qu'ils sont relativement petits, je n'ai jamais prêté attention à la question de l'alignement des octets. Cependant, l'alignement des octets devrait avoir un grand impact sur la gestion de la mémoire et l'efficacité d'exécution du processeur dans les applications à grande échelle. Cet article est basé sur quelques informations et fait un bref résumé.
Tout d'abord, la première conclusion est que l'alignement des octets peut améliorer l'efficacité d'exécution du processeur. (Apprentissage recommandé : PHPSTORM )
Lorsque le CPU exécute des instructions, obtenez les données de la mémoire -octets, 16 octets......<.> À ce stade, si l'adresse de départ du processeur lisant les données de 4 octets ou plus est 1, il doit lire au moins 2 blocs de données, puis mettre 2 données inutiles dans le bloc sont supprimées, puis les données utiles les données sont divisées en données de 4 octets. Cela augmente évidemment le fonctionnement du processeur et affecte l'efficacité d'exécution des instructions du processeur. Si l'adresse de départ des données de lecture du CPU est 0, 4..., alors un seul bloc de données doit être lu à la fois et l'instruction de lecture du CPU est une opération atomique.
L'alignement des octets signifie que pour chaque donnée lue par le processeur, il garantit que son adresse de départ est au début du bloc de données et augmente la valeur là où le nombre d'octets de données est inférieur au Bloc de données CPU (granularité), ce qui lui permet d'occuper un espace mémoire complet d'une granularité. L'alignement des octets évite au processeur les opérations d'interception et d'épissage des données.
Dans la structure, selon le principe d'alignement automatique des octets, la structure
typedef struct _test { char a; int b; char c; } test;
Le compilateur utilisera le numéro d'octet du type de base int avec le plus grand nombre d'octets dans le structure selon la norme d'alignement, le type char sera étendu à 4 octets, donc sizeof(test)=12, mais cette efficacité d'utilisation de la mémoire est relativement faible.
Si vous spécifiez un alignement sur 1 octet par le compilateur, l'efficacité d'exécution du CPU sera réduite.#praama pack(1)
typedef struct _test {
char a;
int b;
char c;
} test;
#pragma pack()
typedef struct _test {
int b;
char a;
char c;
} test;
À ce stade, la structure Membre b occupe 4 octets, a et c partagent les 4 octets suivants, dont deux membres occupent les deux premiers octets, et les deux derniers octets sont des données invalides remplies lors de l'alignement des octets. Cette structure occupe 8 octets. d'espace mémoire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!