Blady
2021-02-21 20:40:23 UTC
Bonjour,
Soit un type contrôlé et une fonction qui retourne ce type, parmi les
trois fonctions suivantes avec trois formes de retour :
- agrégat
- variable locale
- instruction return étendue
quelle est la forme qui serait meilleure du point de vue du nombre de
copie en mémoire et donc du nombre d'appels à Adjust et Finalize ?
type My_Type is new Ada.Finalization.Controlled with record
A1 : String (1 .. 10);
A2 : Boolean;
A3 : Float;
end record;
function F1 (V : Float) return My_Type is
-- agrégat
begin
return (Ada.Finalization.Controlled with "0123456789", V > 0.0, V
/ 2.0);
end F1;
function F2 (V : Float) return My_Type is
-- variable locale
L : My_Type;
begin
L.A1 := "0123456789";
L.A2 := V > 0.0;
L.A3 := V / 2.0;
return L;
end F2;
function F3 (V : Float) return My_Type is
-- instruction return étendue
begin
return L : My_Type do
L.A1 := "0123456789";
L.A2 := V > 0.0;
L.A3 := V / 2.0;
end return;
end F3;
Merci pour vos réponses, Pascal.
Soit un type contrôlé et une fonction qui retourne ce type, parmi les
trois fonctions suivantes avec trois formes de retour :
- agrégat
- variable locale
- instruction return étendue
quelle est la forme qui serait meilleure du point de vue du nombre de
copie en mémoire et donc du nombre d'appels à Adjust et Finalize ?
type My_Type is new Ada.Finalization.Controlled with record
A1 : String (1 .. 10);
A2 : Boolean;
A3 : Float;
end record;
function F1 (V : Float) return My_Type is
-- agrégat
begin
return (Ada.Finalization.Controlled with "0123456789", V > 0.0, V
/ 2.0);
end F1;
function F2 (V : Float) return My_Type is
-- variable locale
L : My_Type;
begin
L.A1 := "0123456789";
L.A2 := V > 0.0;
L.A3 := V / 2.0;
return L;
end F2;
function F3 (V : Float) return My_Type is
-- instruction return étendue
begin
return L : My_Type do
L.A1 := "0123456789";
L.A2 := V > 0.0;
L.A3 := V / 2.0;
end return;
end F3;
Merci pour vos réponses, Pascal.