Paul
Paul

Reputation: 5083

Pass reference to output location vs using return

Which is better for performance when calling a function that provides a simple datatype -- having it fill in a memory location (passed by pointer) or having it return the simple data?

I've oversimplified the example returning a static value of 5 here, but assume the lookup/functionality that determines the return value would be dynamic in real life...

Conventional logic would tell me the first approach is quicker since we are operating by reference instead of having to return a copy as in the 2nd approach... But, I'd like others' opinions.

Thanks

void func(int *a) { *a = 5; }

or...

int func() { return 5; }

Upvotes: 10

Views: 2689

Answers (7)

Timo Geusch
Timo Geusch

Reputation: 24351

For PODs, there is no or almost no difference and I'd always go with a return value as I find those cleaner and easier to read.

For non-PODs the answer is "it depends" - a lot of compilers use Return Value Optimisation in this sort of scenario which tends to create an implicit reference parameter.

However unless you have measured - not "know", but actually measured with a profiler - that returning the results of the function using a return value is actually a bottleneck in your software, go for the more readable version of the code.

Upvotes: 3

Felice Pollano
Felice Pollano

Reputation: 33272

Returning a simple value is just something like an instrution in assmbly ( ie MOV eax,xxxx ), passing a parameter introduce a little more overhead. in any case you should not worry about that, difference are hard to notice. Another important issue is that a function returniong on the left is generally cleaner in term of design, and preferred when possible.

Upvotes: 2

dappawit
dappawit

Reputation: 12590

In my opinion, always go with return unless you know of a reason not to, or you have to return more than one value from the function. Returning a built-in type is very efficient, and whatever the difference vs. returning via pointer, it must be negligible. But the real benefit here is using return is clearer and simpler for those who read the code later.

Upvotes: 2

Mat
Mat

Reputation: 206929

Easy answer: it depends.

It depends on the types being used, whether they can be copied cheaply or not (or at all), whether the compiler can use RVO in some circumstances or not, inline things better with one form or another...

Use what makes sense in the context.

Upvotes: 1

Greg Hewgill
Greg Hewgill

Reputation: 994947

In general, if your function acts like a function (that is, returning a single logical value), then it's probably best to use int func(). Even if the return value is a complex C++ object, there's a common optimisation called Return Value Optimisation that avoids unnecessary object copying and makes the two forms roughly equivalent in runtime performance.

Upvotes: 8

Jerry Coffin
Jerry Coffin

Reputation: 490808

Most compilers will return a value in a register as long as what you're returning is small enough to fit in a register. It's pretty unusual (and often nearly impossible) for anything else to be more efficient than that.

Upvotes: 4

Bo Persson
Bo Persson

Reputation: 92401

This is a low level thing, where it would be hard to see any difference.

Upvotes: 1

Related Questions