4 ms·
I'm curious too. Even if it will be optimized isn't it still be better to pass-by-reference?
by kbumsik 9y ago
I'm curious too. Even if it will be optimized isn't it still be better to pass-by-reference?
- skrebbel 9y agoIn C?
- kbumsik 9y agoI mean pointer.
- tom_mellior 9y agoIt might be easier to answer if you explained why you think it would be better. There may be cases where by-reference (yes, that's an absolutely acceptable thing to say, even in C) is more efficient: If the struct is a kind of "this pointer" (as in object-oriented programming) that is passed to a bunch of functions but relatively rarely used, then passing it by reference causes much less register pressure. Passing it by value would mean occupying a lot of registers with values that are probably not accessed. On the other hand, if you expect the callee to do actual computation on all or most of the fields of the struct you pass in, passing it by value should probably be the way to go. This way, the values to be processed are already in registers and don't have to be stored to the stack by the caller and loaded back from the stack by the callee. There is no general answer that is uniformly best, it depends on the characteristics of the actual program and their interactions with the compiler's optimizations. With inlining in particular, which should often allow the compiler to generate the same code for both versions.
- foo101 9y ago> There may be cases where by-reference (yes, that's an absolutely acceptable thing to say, even in C) I don't want to be nit-picking. But I would like to know why "by-reference" is an acceptable thing to say. When I learnt C, C++, Java, etc. I was repeatedly told that pass by reference exists only in C++. In C, a pointer is passed by value. In Java, a reference is passed by value. Doesn't calling "pass pointer by value" as "pass by reference" lead to confusion and distortion of the true meaning of "by reference"?
- pubby 9y agoWhat do you do when you want to find the value a pointer points to? You dereference it of course! C++ and Java have their own specific language-lawyer definitions of the word reference, but outside of those languages, "reference" is a catch-all term that includes pointers, handles, and indexes.
- robotresearcher 9y agoC implements the concept 'pass by reference' using the mechanism of 'pointer passed by value'. You have no problem using the terms 'loop' or 'recurse' to describe C code, right? But these high-level ideas are implemented without using those terms in the code. Same with 'pass by reference'.
- cubano 9y agoI would expect it would depend on what the function actually did with the data.