CAS et l’alignement de la mémoire (8 Byte Boundaries)
Si vous êtes un habitué de ce blog ou que vous travaillez avec CAS, vous savez que les tables CAS sont étroitement intégrées à la mémoire du serveur. En effet, les tables CAS sont stockées en mémoire et partagent de nombreux attributs avec cette mémoire et notamment le data structure alignment. Le Data structure alignment fait référence à la manière dont les données sont organisées et accessibles dans la mémoire (data alignment, data structure padding, et packing)
Ce sujet est technique, mais signifie que les tables CAS contiendront un remplissage supplémentaire (extra padding) entre les champs. En raison des règles régissant l’allocation de mémoire, il est parfois nécessaire d’ allouer plus de mémoire que nécessaire. Par exemple, la mémoire ne peut être fournie qu'aux programmes de blocs divisibles par 4, 8 ou 16, et si un programme demande peut-être 29 octets, il obtiendra en réalité un bloc de 32 octets. Lorsque cela se produit, l'excès de mémoire est gaspillé.
Prenons la table CAS ci-dessous :
Bien que nous ayons défini deux champ de type char sur 3 octets, l'occupation mémoire est de 16 octets :
La croissance due à l'alignement de la mémoire doit être prise en compte dans tous les aspects d’un projet CAS, du dimensionnement du système à la conception des données.
A noter également que ce padding se produira dans la mémoire vive (données CAS résidant dans la mémoire active), ainsi que dans les mémoires CAS CACHE DISK (SASHDAT), car ces emplacements sur disque peuvent servir de mémoire virtuelle et doivent donc être conformes aux exigences d'alignement de la mémoire du serveur.