gpt4 book ai didi

initialization - Ada:声明和赋值开销

转载 作者:行者123 更新时间:2023-12-02 18:21:38 27 4
gpt4 key购买 nike

我对 Ada 程序中的初始化很好奇:假设我有以下过程:

procedure Foo (Bar : Integer) is
Another_Bar : Integer := Bar;
begin
...
end Foo;

Another_Bar 的分配是否应具有与

相同的开销
procedure Foo2 (Bar : Integer) is
Another_Bar : Integer;
begin
Another_Bar := Bar;
...
end Foo;

我的问题本质上是两个分配是否生成相同的汇编指令,因此速度相等? (没有详细说明目标机器)

最佳答案

根据 Ada 语言标准,这两种形式的代码应该具有不同的性能,没有一般原因。这完全取决于目标机器和所使用的编译器。根据过程中的其余代码,某些编译器甚至可以完全优化掉 Another_Bar 变量。

但是,存在语义差异,如果 BarAnother_Bar 的子类型不同,这可能很重要 - 例如,如果 Another_Bar code> 被声明为 Positive 而不是 Integer。也就是说,在第一种形式中,由 Another_Bar 初始化引发的任何异常(例如,因为 Bar 具有负值)不会由过程本身中可能的异常处理程序处理,但会传播给调用者。在第二种形式中,Another_Bar 是在 begin 之后赋值的,该赋值产生的异常可以由过程自己的异常处理程序来处理。

关于initialization - Ada:声明和赋值开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70802970/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com