This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: std::function and shared object libraries


On Wed, 2015-06-17 at 09:35 +0100, Jonathan Wakely wrote:
> On 17 June 2015 at 00:42, Nick wrote:
> >
> > By "removed" I get the impression that it's somehow literally gone.  For
> > example, a 4GB address space is now 3GB.  The address space is still
> > there, it just contains undefined content which naturally will lead to
> > undefined behavior if accessed.
> 
> Maybe it's just another problem with terminology but I would say it's
> literally gone. After the dlclose() there is nothing mapped at the
> address stored in the function pointer f._M_manager. It's not just
> garbage memory that produces undefined behaviour, it is not even a
> valid address. Trying to access that address causes a segmentation
> fault, raised by the operating system, because that address is not
> part of the process' virtual address space.

Now I'm glad I asked.  I wasn't considering this aspect.  Thanks.

> >> >  So in the case
> >> > of the OP, that would amount to allocated objects (ex. function
> >> > template)
> >>
> >> Template instantiations are not allocated. They are code, not data.
> >
> > Right, in the case of a basic C++ function template.  From the OP I was
> > thinking about something like std::function which I'd expect (though I
> > didn't look at the implementation) has some data along with it.
> 
> But the problem has nothing to do with that data. The data is in the
> program's stack or heap, which doesn't disappear when you dlclose()
> the shared library. What disappears is the code for the function that
> the object will invoke from its destructor.
> 
> This never had anything to do with memory allocation or where
> variables live in memory, only code.

Right, I get that the problem isn't related to the data.  I was using
this opportunity to understand/confirm the effects of this scenario on
memory.  I think it's clear to me now.  Thanks for explaining and
teaching.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]