Re: [Gc] Strange leak in simple code
Bruce Hoult <[email protected]> Wed, 15 Jul 2015 16:00:45 +1200
| Newsgroups | gmane.comp.programming.garbage-collection.boehmgc |
|---|---|
| Message-ID | <CAMU+Ekw2OXMzOx7qOTpMxVOw=w9vQYcdTifXda2m8rzZS9MsEA@mail.gmail.com> |
Ok, artificially tricky code, not what it first appears. However, it is still true that you are linking all the nodes together, just that you are not *explicitly* retaining a pointer to the first node. All that is required for this to not be garbage collected is, for example: 1) the compiler to keep a copy of the pointer to the first node allocated in a register or on the stack. Probably should not happen at -O0. 2) If *any* other value in memory looks like a pointer to one of your nodes (not just the first one), then all nodes allocated after that one will be retained. On Wed, Jul 15, 2015 at 2:52 PM, Юрий Соколов <[email protected]> wrote: > Read the code carefully. This code keeps pointer only to last node. So > only two nodes are reachable at max. > What do you mean "it leaks?" > > You're making a linked list, with every object pointed to either by 'last' > or by the previous object. > > I would be very very unhappy if this was garbage collected!! > > > On Mon, Jul 13, 2015 at 11:12 PM, Юрий Соколов <[email protected]> > wrote: > >> Using libgc from Ubuntu 15.04 (7.2b-6.4) this simple code leaks: >> >> #include <gc.h> >> struct list { >> struct list* next; }; >> int main() { >> GC_INIT(); >> struct list *last = NULL; >> for (;;) { >> struct list* nuo = GC_MALLOC(sizeof(struct list)); >> nuo->next = NULL; >> // if next line is commented, then no leakage >> if (last) last->next = nuo; >> last = nuo; >> } } >> >> >> >> stackoverflow question >> http://stackoverflow.com/questions/31380641/libgc-why-this-code-leaks >> >> -- >> This message has been scanned for viruses and >> dangerous content by *MailScanner* <http://www.mailscanner.info/>, and >> is >> believed to be clean. >> _______________________________________________ >> bdwgc mailing list >> [email protected] >> https://lists.opendylan.org/mailman/listinfo/bdwgc >> > > > -- > This message has been scanned for viruses and > dangerous content by *MailScanner* <http://www.mailscanner.info/>, and is > believed to be clean. > _______________________________________________ bdwgc mailing list [email protected] https://lists.opendylan.org/mailman/listinfo/bdwgc