Ada:了解变量的大小与type'Size vs value_size vs object_size

时间:2017-03-17 23:32:58

标签: ada

让我们定义以下Ada类型:

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-您确认以下内容吗?

my_var : Type_A;

(Type_A'Size = my_var'Size)返回False

2- my_var'Size的真正价值是什么? 我会说尺寸至少是:

Type_B'Size + Integer'Size

3- Type_A'Size的价值是什么?

我想说大小是可能配置的最大值。

3-编译器是否还有其他内容(可能隐藏)添加到my_var

我还阅读了一些有关Value_SizeObject_Size的文章 但我现在还没有全面了解。

THX

2 个答案:

答案 0 :(得分:3)

正如another answer中引用的那样,LRM要求'Size由不确定类型的实现定义;另外,LRM M.2 (45)要求实现文档具有以下特征:

  

(45)Size对于不定子类型的含义。

如果你的编译器是GNAT,这就是它在参考手册中所说的:

  

不定子类型的大小是可能的最大大小,   (...)。

添加编译器开关-gnatR3时,您可以看到编译器的选择。输出还列出了'Value_Size的数字,因为它们取决于记录判别式的值。 ((...)部分讨论了子程序参数的大小。)

答案 1 :(得分:2)

引用LRM中的第13.3节:

  

(44)对于每个子类型S:

     

(45)S'Size [...]

     

(48)如果S是不确定的,则意义是实现定义的。 [...]

换句话说:它是实现定义的。