2017-03-17 1 views
0

Laissez les suivantes définir les types Ada:Ada: Comprendre variable'Size vs vs type'Size value_size vs object_size

type Type_Huge is array (1 .. Integer'Last) of Float; 
type Type_B is (foo, bar, blop, bloub); 
type Type_A (disc : Type_B := foo) is 
    record 
     case disc is 
      when foo => 
       My_int : Integer; 
      when bar => 
       huge_data : Type_Huge := (others => 0.0); 
      when others => 
       null; 
     end case; 
    end record; 

1- Est-ce que vous confirmez ce qui suit?

my_var : Type_A; 

(Type_A'Size = my_var'Size) retours False

2- Quelle est la valeur réelle de my_var'Size? Je dirais que la taille est au moins:

Type_B'Size + Integer'Size 

3- Quelle est la valeur de Type_A'Size?

Je dirais que la taille est le maximum des configurations possibles.

3- Y a-t-il autre chose que le compilateur ajouterait (probablement caché) à my_var?

J'ai également lu quelques articles concernant Value_Size et Object_Size Mais je ne comprends pas l'image complète en ce moment.

Thx

+1

Vous devriez au moins essayer ceci avec votre compilateur; cela vous donnerait un point de données. –

Répondre

3

Comme indiqué dans another answer le LRM exige 'Size être défini par la mise en œuvre pour les types indéfinis; en outre, LRM M.2 (45) exige que la mise en œuvre documente cette caractéristique:

(45) Le sens de Size pour les sous-types indéfinis.

Si votre compilateur est GNAT, voici ce qu'elle dit dans son manuel de référence:

Taille pour un sous-type indéfini est la taille maximale possible, (...).

Vous pouvez voir le choix du compilateur lorsque vous ajoutez le commutateur de compilation -gnatR3. La sortie répertorie également les numéros pour 'Value_Size car ils dépendent de la valeur du discriminant d'enregistrement. (La partie (...) parle de la taille des paramètres du sous-programme.)

2

section mentionnant 13,3 dans le LRM:

(44) pour chaque sous-type S:

(45) S'Size [...]

(48) Si S est indéfini, la signification est définie par l'implémentation. [...]

En d'autres termes: Son implémentation est définie.