[Bug 281471] ASLR: jemalloc RES memory keeps on increasing until process cores
Date: Fri, 13 Sep 2024 05:41:44 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=281471
--- Comment #1 from Rupesh Pilania <rupeshpilania@gmail.com> ---
mem-fragment program reference was taken from
https://engineering.linkedin.com/blog/2021/taming-memory-fragmentation-in-venice-with-jemalloc#:~:text=Jemalloc
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
// Define constants to make sure strings are not allocated at the top of the
heap
#define HIT_ENTER "Press Enter to continue...\n"
#define ALLOCATED "500k 5KB chunks were just provisioned\n"
#define FREED "The first allocations were just free()'d.\n"
#define FREED_NEXT "The 2nd allocations were just free()'d.\n"
void press_enter_to_continue(void) {
printf(HIT_ENTER);
getchar();
return;
}
int main() {
printf("Hello! This program will fragment its process heap. Run top -p %d
to follow along!\n", getpid());
press_enter_to_continue();
int i;
// Arbitrary value
int ARRAY_SIZE = 5*1024*102;
// Because we're asking for a large size at the get-go, the backing memory
for these arrays will be mmap'd. But the pointers stored here will be for
// small allocations that we expect to be brk()'d. We keep the mapping so
we can free them later.
char *p1[ARRAY_SIZE];
char *p2[ARRAY_SIZE];
int mallocSize = 5 * 1024;
for(i=0; i < ARRAY_SIZE; i++){
// malloc in small chunks such that we are always below the mmap
threshold for these allocations.
p1[i] = malloc(mallocSize);
// Write something to make sure the page is backed by physical RAM
*p1[i] = 'a';
}
printf(ALLOCATED);
press_enter_to_continue();
for(i=0; i < ARRAY_SIZE; i++){
// Again, malloc in small chunks such that we are always below the mmap
threshold for these allocations
p2[i] = malloc(mallocSize);
*p2[i] = 'a';
}
printf(ALLOCATED);
press_enter_to_continue();
// Free the allocations
for(i=0; i < ARRAY_SIZE; i++){
free(p1[i]);
}
printf(FREED);
press_enter_to_continue();
// Free the allocations
for(i=0; i < ARRAY_SIZE; i++){
free(p2[i]);
}
printf(FREED_NEXT);
press_enter_to_continue();
return 0;
}
--
You are receiving this mail because:
You are the assignee for the bug.