In this Microsoft sample an array Of Doubles is passed to the functions MultiplyMatricesSequential(...)
and MultiplyMatricesParallel(...)
as argument result using ByVal
modifier: http://msdn.microsoft.com/de-de/library/dd460713(v=vs.110).aspx
Values in the arrays are being modified in these functions and the changes are available after the call to the functions returns.
When I change ByVal
to ByRef
in function MultiplyMatricesSequential(...)
nothing changes, when I change to ByRef
in the second function the IDE complains arguments being manipulated in Lambda expressions cannot be passed by reference.
I now wonder how the array values change in the caller when the use of ByVal
is being forced?
When you pass an object ByVal to a function, you put a pointer to it on the stack. Then function can then modify the inner parts of the object, but not replace it with a new object.
When you pass an object ByRef, you instead put a pointer to the objects pointer on the stack. The function can now replace the entire object with a new one.
If you send an intrinsic value, like an Int32
, to a function ByVal the value is put on the stack and can't be edited at all by the function.