Alignement des octets de la structure
1. Dans le compilateur Renesas CA78K0R La
structure par défaut du compilateur Renesas CA78K0R est alignée sur 2 octets. Modifiez le paramètre du compilateur Options de compilation -> Contrôle des données -> Membres de la structure du pack sur Oui (-rc), comme illustré dans la figure 1. Il peut être ajusté à un alignement de 1 octet, c'est-à-dire que la structure est continue et qu'il n'y a pas de zone de remplissage. La preuve peut être trouvée dans l'aide de l'EDI, comme le montre la figure 2. Cependant, la modification de ce paramètre n'a d'effet que sur la structure et n'a aucun effet sur les autres types de variables.
Figure 1 Paramètres des options du compilateur Renesas
Figure 2 Description de l'alignement de la structure dans l'aide
实测如下:
1. 当没有关闭内存对齐时:定义结构体
(1)如果只有一个u8类型的变量,不会填充;
(2)当定义大于1个的奇数个u8类型的变量,编译器会填充剩下的一个 字节区域,保证内存大小是2的倍数;
(3)定义其他类型情况如上第2条。
2. 关闭内存对齐之后
使用sizeof()函数测得结构体的大小即为各个成员大小之和,不会出现填充区。但是内存访问结构体的速度会下降。
2. Concernant l'alignement des octets de la mémoire de
structure La structure a un alignement d'octets pour améliorer l'efficacité de l'accès. Généralement, les trois règles suivantes sont suivies (disponibles en vérifiant les informations):
(1) La première adresse de la variable de structure peut être maximisé par lui. Les membres de type large de base sont divisibles par la taille;
(2) Le décalage de chaque membre de la structure par rapport à la première adresse de la structure (offset) est un multiple entier de la taille du membre, si nécessaire, le compilateur ajoutera entre les membres Ajout interne;
(3) La taille totale de la structure est un multiple entier de la taille du membre de type de base le plus large de la structure. Si nécessaire, le compilateur ajoutera un remplissage de fin après le dernier membre.
Selon les règles ci-dessus, la taille du type de base le plus large lors de l'accès à l'unité de base de l'élément de structure peut être déduite. Par exemple, la largeur maximale du type de membre est de 4 octets et la taille de la structure est un multiple de 4. Par conséquent, il est nécessaire d'agencer l'ordre des éléments selon les règles ci-dessus pour réduire l'apparition de zones de remplissage inutiles et améliorer l'utilisation de la mémoire. Bien entendu, le nombre d'alignement d'octets peut être défini par le programmeur.
Matériel de référence: