On Saturday, June 01, 2013 04:39:07 Shriramana Sharma wrote: > On Sat, Jun 1, 2013 at 1:13 AM, Jonathan M Davis <jmdavisp...@gmx.com> wrote: > > Certainly, > > for anything that's small enough to fit in a register, it's likely to be > > faster to pass by value. > > So pardon my ignorance, but a pair which only contains two doubles -- > it would fit in a CPU register? How about a bezier class/struct which > contains 4 pairs i.e. 8 doubles?
I really don't know. I don't generally deal with anything at the register level. Normally, what you do is you just pass by value unless you know that the struct is huge, and then you just worry about whether passing by value or by reference if profiling makes it clear that passing by value is a performance hit. But it seems to me that in general, worrying about whether something with a few ints or floats in it is going to be able to be passed in a register or not isn't particularly productive unless you've already found it to be a performance problem or know that you're in an environment where it really matters (in which case, you probably know enough about registers to be far better informed about what is and isn't efficient). > And that would mean that passing by value is faster 'cause it's > cheaper to copy the data to a register and have the processor operate > on it directly than to copy the pointer (which lies beneath the > reference) and have the indirection and *then* copy (?) the data? (I > mean I'm not sure how these things work -- even when you are using a > pointer/reference, copying from the memory to CPU register is > unavoidable right? C++'s const T & only makes it so that copying from > memory-to-memory can be avoided, right? Why would you be copying the data if it was a pointer that was passed? If you pass by ref or by pointer, then only a pointer to the data is copied. Member variables may be copid into registers when operated on, but only the pieces that you operated on would end up being copied into registers, and only then if what you're doing requires a register. There's plenty of stuff that just gets passed around on the stack without any operations being done on them besides copying or moving them. It all depends on what's being done with them. But it's been too long since I studied assembly for me to be able to go into all of the details with registers and the like. - Jonathan M Davis