From: David S. <da...@da...> - 2004-05-02 05:17:16
|
John Klein <jk2...@ya...> writes: > --- Daniel Barlow <da...@te...> wrote: > > > > Right, and I don't have a macos box to test on either. Things you > > might want to check include that load-1-foreign and suchlike still > > work without mysterious heap trashing at next gc, etc. > > These changes seem to work nicely with 1) a toy load-1-foreign program > and 2) loading a fairly heavy Fortran and X11 graphics library. > It is possible to allocate ~450MB in an array, load libraries, > check array for trashing, gc the array, call libraries, etc, without > encountering any problems (yet). So this is good enough for my purposes, > but I don't know if it is proof enough for production [but see 1]. > > > > > The GC uses machine registers as roots, but doesn't know which > > registers are 'live' at any given point. > > I had figured it might be something like this, but I thought this was > only a concern with the conservative gc and the stack. But GC always > cleans up array from the REPL, so it certainly some local phenomenon like this. > > At any rate, thanks for pointing out the location of the memory limitation. > This lets me solve my problem of a limited array size. > > > ============ > > [1] vmmap of an SBCL process on Darwin shows that user level object files are > loaded into low memory, and the system libraries seem to be loaded > above #x9000000, so if my very very naive understanding of the memory map > is correct, then the changes should be safe because sbcl's memory use now ends > at #x4ffff000, well below #x9000000. But this is all an educated guess on > my part. [trimmed] For interested parties, there is documentation on Apple's website that is probably relevent to this topic: http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachORuntime/index.html http://developer.apple.com/documentation/Darwin/Conceptual/KernelProgramming/index.html http://developer.apple.com/documentation/Porting/Conceptual/PortingUnix/index.html Fairly basic, but references Kernel Programming: http://developer.apple.com/documentation/Performance/Conceptual/ManagingMemory/Concepts/AboutMemory.html Oddly enough, with all my searching, I couldn't find the layout of the logical address space used in OS X. I did keep running into the address space layout for System 7 :-/ The Kernel Programming topic has a big Keep Out warning. However, it was the only place I could find the low level APIs for getting at system memory. It would be nice to see a simple map of what the "safe" address space is to use. In any event, there is a fair bit of reading involved. -- I wouldn't mind the rat race so much if it wasn't for all the damn cats. |