detecting memory size?

David Roundy droundy at jdj5.mit.edu
Thu Jan 29 07:46:59 EST 2004


On Thu, Jan 29, 2004 at 01:13:28PM +0100, Ketil Malde wrote:
> My aplogies for being unclear!  What I really want is the amount of
> memory my application can allocate and excercise lively without
> causing thrashing.  On my Linux computer, that amounts more or less to
> the installed, physical RAM, minus a bit, so I'll settle for that. :-)
> 
> (After browsing various information, it seems I'm after the minimum of
> physical RAM and getrlimit(RLIMIT_DATA)).

I use the following with ghc.  You don't really want to do this in haskell,
since there's no way to set the RTS values from haskell anyways.

#include <Rts.h>
#include <RtsFlags.h>
#include <unistd.h>

void defaultsHook (void) {
  RtsFlags.GcFlags.maxStkSize  =  8*1000002 / sizeof(W_); /* 8M */

#ifdef _SC_PHYS_PAGES
  unsigned long long pagesize = sysconf(_SC_PAGESIZE);
  unsigned long long numpages = sysconf(_SC_PHYS_PAGES);
  unsigned long long mhs = 2*numpages*pagesize;
  RtsFlags.GcFlags.maxHeapSize = 1ULL+mhs/BLOCK_SIZE_W;
#endif
}
-- 
David Roundy
http://civet.berkeley.edu/droundy/


More information about the Glasgow-haskell-users mailing list