Multiple return values...

Robert Jacques sandford at jhu.edu
Sun Mar 11 19:00:39 PDT 2012


On Sun, 11 Mar 2012 18:15:31 -0500, Timon Gehr <timon.gehr at gmx.ch> wrote:

> On 03/11/2012 11:58 PM, Robert Jacques wrote:
>> Manu was arguing that MRV were somehow special and had mystical
>> optimization potential. That's simply not true.
>
> Not exactly mystical, but it is certainly there.
>
> void main(){
>      auto a = foo(); // MRV/struct return
>      bar(&a.x); // defined in a different compilation unit
> }
>
> struct return has to write out the whole struct on the stack because of
> layout guarantees, probably making the optimized struct return calling
> convention somewhat slower for this case. The same does not hold for MRV.

The layout of the struct only has to exist _when_ the address is taken. Before that, the compiler/language/optimizer is free to (and does) do whatever it want. Besides, in your example only the address of a field is taken, the compiler will optimize away all the other pieces a (dead variable elimination).


More information about the Digitalmars-d mailing list