Maison > Problème commun > L'alignement des octets affectera-t-il l'efficacité de l'accès à la mémoire ?

L'alignement des octets affectera-t-il l'efficacité de l'accès à la mémoire ?

(*-*)浩
Libérer: 2019-12-26 09:27:17
original
5741 Les gens l'ont consulté

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é.

L'alignement des octets affectera-t-il l'efficacité de l'accès à la mémoire ?

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.

Autre conclusion, l'alignement des octets est utile pour optimiser la mémoire.

Dans la structure, selon le principe d'alignement automatique des octets, la structure

typedef struct _test {
char a;
int b;
char c;
} test;
Copier après la connexion

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()
Copier après la connexion

Afin d'optimiser la mémoire du programme tout en garantissant l'efficacité de l'exécution du CPU, l'ordre des données membres dans la structure doit être ajusté

typedef struct _test {
int b;
char a;
char c;
} test;
Copier après la connexion
À 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal