On 2013-03-09, Roy Smith <r...@panix.com> wrote: > In article <khg1v3$l7q$1...@reader2.panix.com>, > Grant Edwards <invalid@invalid.invalid> wrote: > >> In Unix there is no way to release heap memory (which is what you're >> talking about) back to the OS except for terminating the process. > > That's not quite true. The man page for BRK(2) (at least on the Linux > box I happen to have handy) says: > > "brk() and sbrk() change the location of the program break, which > defines the end of the process's data segment (i.e., the program > break is the first location after the end of the uninitialized data > segment). Increasing the program break has the effect of allocating > memory to the process; decreasing the break deallocates memory." > > So, in theory, it's possible.
Well spotted. I would have bet money (OK, not a lot), that sbrk() only accepted positive increment values. I seem to have conflated what sbrk() will accept and the fact that the C library's malloc/free calls never call sbrk() with a nagative number. [... nicely done demonstraction of negative sbrk() parameter usage ...] > In practice, unless you go to extraordinary lengths (i.e. avoid > almost all of the standard C library), the break is going to be > managed by malloc(), and malloc() provides no way to give memory back > (insert handwave here about mmap, and another handwave about various > versions of malloc). But, that's due to the way malloc() manages its > arena, not anything fundamental about how Unix works. Indeed. What I should have said was that there's no way to return to the OS memory obtained via calls to malloc() et al, and those are the calls that "good" C programmers (like the maintainers of CPython) use. In theory, you could modify the C library so that calls to free() might return memory to the OS. Sometimes. If you're lucky. The problem is that if there's _one_byte_ of memory in use at the "end" of the heap region, it doesn't matter if there's an unused 16GB chunk in the middle -- it can't be returned to the OS. -- Grant Edwards grant.b.edwards Yow! Look DEEP into the at OPENINGS!! Do you see any gmail.com ELVES or EDSELS ... or a HIGHBALL?? ... -- http://mail.python.org/mailman/listinfo/python-list