#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/resource.h>
int main(void){
    struct rlimit rl;
    getrlimit(RLIMIT_DATA, &rl);
    printf("RLIMIT_DATA cur=%llu max=%llu\n",
        (unsigned long long)rl.rlim_cur, (unsigned long long)rl.rlim_max);
    unsigned long long lo=~0ULL, hi=0;
    for (int i=0;i<20000;i++){
        void *p = mmap(NULL, 4096, PROT_READ, MAP_ANON, -1, 0);
        if (p==MAP_FAILED) break;
        unsigned long long a=(unsigned long long)p;
        if(a<lo)lo=a; if(a>hi)hi=a;
        if(i<10) printf("  addr[%d]=0x%llx\n", i, a);
        munmap(p,4096);
    }
    printf("lo=0x%llx hi=0x%llx span_bytes=%llu (%.2f GB)\n",
        lo, hi, hi-lo, (double)(hi-lo)/1e9);
    return 0;
}
