Jusqu’ici, nous avons examiné les matrices statiques dont le stockage est défini au moment de la compilation et alloué quand un programme est chargé en mémoire. Les mémoires statiques conviennent pour de petites matrices ou pour de grandes qui sont normalement pleines. Mais, en réalité, certaines applications demandent des matrices
Matrices allouées dynamiquement
de différentes tailles selon les moments. Ainsi, une commande client ne contiendra normalement qu’un petit nombre d’articles, mais une commande d’entreprise à entreprise pourra contenir des milliers de lignes. Dans ce cas, il faut pouvoir changer dynamiquement la taille des matrices de commandes pour bien utiliser la mémoire.
Pour allouer dynamiquement le stockage à l’exécution pour une matrice, vous devez utiliser une variable basée puis contrôler le stockage qui lui est attribué. Le processus est en réalité très simple. Premièrement, définissez la matrice basée sur un pointeur :
d items s like( item.id )
d dim( 32000 )
d based( itemsPtr )
La matrice ITEMS peut contenir jusqu’à 32000 ITEM.IDS. Aucun stockage n’est attribué pour la matrice parce qu’elle est basée sur le pointeur ITEMSPTR.
Ensuite, définissez les variables pour contrôler l’allocation du stockage :
d itemsCurr s like( idx )
d itemsSize s like( idx )
d itemsIncr s 100
ITEMSCURR contient le nombre actuel d’éléments dans la matrice, ITEMSSIZE contient la taille actuelle de la matrice et ITEMSINCR définit le nombre d’éléments auxquels il faut allouer du stockage à un certain moment.
Pour simplifier le traitement, allouez le stockage d’un octet pour la matrice dans la section d’initialisation du programme :
itemsPtr = %alloc( 1 );
Les matrices allouées dynamiquement doivent être initialisées explicitement.
Le moyen le plus simple pour cela consiste à charger des éléments séquentiellement et à ne référencer que les éléments chargés. Avant de charger un élément, vérifiez d’abord si la matrice a besoin d’être étendue :
if itemsCurr = itemsSize;
itemsCurr += itemsIncr;
itemsPtr = %realloc( itemsPtr: itemSize * %size( items ) );
endif;
Si la matrice est pleine, agrandissez- la et adaptez le stockage à sa nouvelle taille. Puis chargez l’élément :
itemsCurr += 1;
items( itemsCurr ) = 123;
Vous pouvez trier et examiner les éléments présents dans la matrice, à condition de limiter les fonctions à la portion chargée de la matrice :
sorta %subarr( items: 1: itemsCurr );
idx = %lookup( item.id: items: 1: itemsCurr );
A la fin du programme, vous devez libérer le stockage alloué à la matrice :
dealloc itemsPtr;
Téléchargez cette ressource
Mac en entreprise : le levier d’un poste de travail moderne
Ce livre blanc répond aux 9 questions clés des entreprises sur l’intégration du Mac : sécurité, compatibilité, gestion, productivité, coûts, attractivité talents, RSE et IA, et l’accompagnement sur mesure proposé par inmac wstore.
Les articles les plus consultés
- N° 2 : Il faut supporter des langues multiples dans SharePoint Portal Server
- Chiffrements symétrique vs asymétrique
- Cybersécurité Active Directory et les attaques de nouvelle génération
- Partager vos images, vidéos, musique et imprimante avec le Groupe résidentiel
- Et si les clients n’avaient plus le choix ?
Les plus consultés sur iTPro.fr
- Communication d’entreprise à l’ère de l’IA : fragmentation, Shadow AI et perte de contrôle
- Pourquoi les outils de sécurité ne suffisent plus face aux angles morts de la détection
- Rhea1 : SiPearl allume le CPU européen le plus ambitieux pour le HPC et l’IA souveraine
- L’analytique prédictive au service de la décarbonation en France
Articles les + lus
Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
Rhea1 : SiPearl allume le CPU européen le plus ambitieux pour le HPC et l’IA souveraine
Analyse Patch Tuesday Mai 2026
Les coûts cachés des merge requests générées par l’IA
Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
À la une de la chaîne Tech
- Microsoft Build 2026 : contre-offensive des modèles maison face à OpenAI et Anthropic
- Rhea1 : SiPearl allume le CPU européen le plus ambitieux pour le HPC et l’IA souveraine
- Analyse Patch Tuesday Mai 2026
- Les coûts cachés des merge requests générées par l’IA
- Femmes et métiers de la tech : une attractivité réelle freinée par des stéréotypes persistants
