It varies a bit with the kernel you are using. For Sun's (which have better man pages): RLIMIT_DATA controls heap memory (how much you can get with the brk() system call). RLIMIT_AS controls total memory (heap, and mmap and stack). In Linux (2.4), brk() seems to check against both while mmap() is only against RLIMIT_AS. The distinction is a bit silly, that's for sure.