Comprendre l'allocation mémoire en COBOL

En COBOL, la mémoire est allouée de façon séquentielle et fixe selon les déclarations de la DATA DIVISION. Chaque variable (ou groupe) occupe un espace précis et contigu en mémoire.

Cet exemple va vous aider à visualiser comment COBOL organise les octets en mémoire.

Déclaration des variables

01 CLIENT-A        PIC X(10).
01 CLIENT-B.
   02 ID-C         PIC X(03).
   02 FILLER       PIC X(03).
        

Allocation mémoire – Schéma simplifié

Adresse mémoire : 100 101 102 103 104 105 106 107 108 109 110 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐ CLIENT-A (10 octets)│ │ │ │ │ │ │ │ │ │ │ │ ← 100 à 109 (10 octets) └─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘ Adresse mémoire : 120 121 122 123 124 125 126 ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┐ CLIENT-B (6 octets) │ │ │ │ │ │ │ │ ← 120 à 125 (6 octets) └─────┴─────┴─────┴─────┴─────┴─────┴─────┘ │ID-C │ FILLER │ └───────────────┘─────────────────────────┘ 120 122 123 125

Explications détaillées pour débutants

Exemple de code montrant les accès

IDENTIFICATION DIVISION.
PROGRAM-ID. MEMORY-EXAMPLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 CLIENT-A        PIC X(10) VALUE "ABCDEFGHIJ".

01 CLIENT-B.
   02 ID-C         PIC X(03) VALUE "123".
   02 FILLER       PIC X(03) VALUE "   ".

PROCEDURE DIVISION.
    DISPLAY "CLIENT-A (10 octets)  : [" CLIENT-A "]"
    DISPLAY "ID-C (3 octets)       : [" ID-C "]"
    DISPLAY "CLIENT-B (6 octets)   : [" CLIENT-B "]"

    MOVE "XYZ" TO ID-C
    DISPLAY "Après modification ID-C :"
    DISPLAY "ID-C     : [" ID-C "]"
    DISPLAY "CLIENT-B : [" CLIENT-B "]"   *> on voit que le groupe voit la modif

    STOP RUN.
        
Télécharger le code

Sortie attendue

CLIENT-A (10 octets)  : [ABCDEFGHIJ]
ID-C (3 octets)       : [123]
CLIENT-B (6 octets)   : [123   ]
Après modification ID-C :
ID-C     : [XYZ]
CLIENT-B : [XYZ   ]
        

À retenir :