Is it's correct to say that ALL types that can grow are place on heap?

Steven Schveighoffer schveiguy at gmail.com
Wed Sep 12 12:28:40 UTC 2018


On 9/11/18 3:11 AM, Timoses wrote:
> Aww, I really would love some insights into function parameter passing. 
> Why is it said that passing by value can be more efficient at times?
> Since it is also said that passing large structs by value can be 
> expensive, why then would it not be cheaper to ALWAYS pass everything by 
> reference? What mechanism is behind the scene that follows one to reason 
> that sometimes passing by value is less expensive?

So consider that accessing a struct from the function is cheaper when it 
is passed by value -- you have one offset from the stack pointer, and 
that's it. Vs. going through the stack pointer to get the reference, and 
then dereferencing that.

In addition, passing a large struct by value can be as cheap or even 
cheaper if you can construct the value right where it is going to be 
passed. In other words, you don't need to make *any* copies. This can be 
true for rvalues that are passed by value, but not lvalues.

So in addition to register passing, there are other benefits to consider.

-Steve


More information about the Digitalmars-d-learn mailing list