
On Nov 17, 2004, at 9:55 PM, David Abrahams wrote:
"Thorsten Ottosen" <nesotto@cs.auc.dk> writes:
Here's my take on it: a compiler is allowed to a remove any copy operations as long as the programs observed behavior is the same. AFAICT, copying (or assigning) a vector<int> (compared to not doing it) will never change the observed behavior.
You're kidding, right? I doubt very much that the compiler can legitimately decide that side effects on the memory subsystem due to allocation are not observable.
Since I've been researching in this area for several years... Dave is correct: no compiler out there is going to optimize this, because the side effects are killer. It is possible to analyze that behavior and perform the optimization Thorsten is describing, but (1) There are better ways than looking at it from the memory subsystem/pointer magic angle (2) This is very much an open research area; don't expect this from a research compiler for at least 2 years. (3) This is very much an open research area; don't expect this from a commercial compiler for at least 10 years. Copy elision and the RVO are all we have. We can't rely on anything more than that. Doug