Anders Logg wrote:
> On Sun, Feb 07, 2010 at 10:58:44PM +0000, Garth N. Wells wrote:
>>
>> Anders Logg wrote:
>>> This looks a like a non-optimal solution. Are you returning the mesh
>>> by value? That will lead to creation of a temporary and copying of the
>>> entire refined mesh.
>>>
>> So they used say ;). Apparently modern compilers are all clever enough
>> not to.
>>
>> Garth
> 
> Is that really so? Do you have any good references that explain this
> in detail? 

  http://en.wikipedia.org/wiki/Return_value_optimization

and from 'man gcc'

-fno-elide-constructors
  The C++ standard allows an implementation to omit creating a temporary
which is only used to initialize another object of the same type.
Specifying this option disables that optimization, and forces G++ to
call the copy constructor in all cases.

Garth

This could potentially lead to many changes in DOLFIN where
> we could return by value rather than by reference with the prime
> example being
> 
>   A = assemble(a);
> 
> But does it really handle non-copying of a wrapped PETSc data structure?
> 
> --
> Anders
> 
> 
>>> What if we have
>>>
>>>   FooRefinement::refine(old_mesh, new_mesh)
>>>
>>> or similar?
>>>
>>>> ------------------------------------------------------------
>>>> revno: 4461
>>>> committer: Garth N. Wells <[email protected]>
>>>> branch nick: dolfin-nompi
>>>> timestamp: Sun 2010-02-07 21:53:42 +0000
>>>> message:
>>>>   Work on mesh refinement interface.
>>>>
>>>>   Do not overwrite old mesh inside refinement functions belonging to 
>>>> static classes. Need to keep old mesh to peform update in adapative 
>>>> methods, so previously the mesh had to be copied before calling 
>>>> refine(...).
>>>> modified:

_______________________________________________
Mailing list: https://launchpad.net/~dolfin
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~dolfin
More help   : https://help.launchpad.net/ListHelp

Reply via email to