From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,7be1cfc685fd1ce2,start X-Google-Attributes: gid103376,public From: Andrew L Moore {66003} Subject: Access types vs. Record types as procedure parameters Date: 1999/08/19 Message-ID: <37BC4F12.E33D50EE@gbr.msd.ray.com>#1/1 X-Deja-AN: 514801053 Content-Transfer-Encoding: 7bit X-Accept-Language: en Content-Type: text/plain; charset=us-ascii X-Complaints-To: usenet@swl.msd.ray.com X-Trace: swlmail.msd.ray.com 935087891 11374 138.127.37.14 (19 Aug 1999 18:38:11 GMT) Organization: Raytheon Company Mime-Version: 1.0 NNTP-Posting-Date: 19 Aug 1999 18:38:11 GMT Newsgroups: comp.lang.ada Date: 1999-08-19T18:38:11+00:00 List-Id: I am debating on whether to pass a record object to a procedure or an access type to that record object. For example I have: package body X is type Record_Type; type Array_Type is array (1 .. n) of Record_Type; Array_Object : Array_Type; procedure One; procedure Two (Parameter : in Record_Type); ---More procedures and functions end X; procedure One is begin for I in range 1 .. n loop procedure Two(Parameter => Array_Object (I)); end loop; end One; -------------------------------------------------------------------------------------- OR: package body X is type Record_Type; type Array_Type is array(1 .. n) of Record_Type; type Access_Type is access Record_Type; Array_Object : Array_Type; function Address_To_Pointer is new Ada.Unchecked_Conversion(System.Address, Access_Type); procedure One; procedure Two (Parameter : in Access_Type); --More procedures and functions end X; procedure One is Object_Ptr : Access_Type := null; begin for I in range 1 .. n loop Object_Ptr := Address_To_Pointer(Array_Object(I)'Address) procedure Two (Parameter => Object_Ptr); end loop; end One; I am looking for the way that would provide the greatest speed of execution. I know that passing a pointer to an object of a record type is more efficient that passing the record itself, but would that be negated by repeated calls to Unchecked_Conversion. Basically, are there any advantages to using Unchecked_Conversion to get an access value to an object to then pass it to a procedure. Any assistance you could provide would be greatly appreciated.