Ada:理解变量“大小与类型”大小与值大小与对象大小

Ada:理解变量“大小与类型”大小与值大小与对象大小,ada,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; w

定义以下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;
键入_A'Size=my_var'Size返回False

2-我的尺码的实际价值是多少? 我认为尺寸至少是:

Type_B'Size + Integer'Size
3-A型尺寸的值是多少

我想说的是尺寸是可能配置的最大值

3-编译器是否还会添加其他可能隐藏到我的_var中的内容

我也读过一些关于价值大小和对象大小的文章 但我现在还不了解全部情况


Thx引用LRM第13.3节:

44对于每个子类型:

45 S尺寸[…]

48如果S是不确定的,则其含义由实现定义。[……]


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

引用LRM中的第13.3节:

44对于每个子类型:

45 S尺寸[…]

48如果S是不确定的,则其含义由实现定义。[……]

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

如LRM中所引用,要求“大小由实现定义,用于不确定类型;此外,要求实施文件记录此特征:

45不确定子类型的大小含义

如果您的编译器是GNAT,这是它在参考手册中声明的内容:

不确定子类型的大小是可能的最大大小,

添加编译器开关-gnatR3时,可以看到编译器的选择。输出还列出了“值大小”的数字,因为它们取决于记录鉴别器的值。这个第三部分讨论子程序参数的大小。

如LRM中所述,要求“大小由不确定类型的实现定义;此外,要求实施文件记录此特征:

45不确定子类型的大小含义

如果您的编译器是GNAT,这是它在参考手册中声明的内容:

不确定子类型的大小是可能的最大大小,


添加编译器开关-gnatR3时,可以看到编译器的选择。输出还列出了“值大小”的数字,因为它们取决于记录鉴别器的值。这个第二部分讨论子程序参数的大小。

您至少应该在编译器中尝试一下;这会给你一个数据点,你至少应该在你的编译器上尝试一下;这会给你一个数据点。