mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-07-06 19:38:41 +03:00
realloc uses remap automatically after remap_threshold
This commit is contained in:
parent
ac21489ce7
commit
8fffc92e15
9 changed files with 180 additions and 42 deletions
|
@ -19,12 +19,13 @@ static void negative_stat(void);
|
|||
static void alloc_huge(void);
|
||||
static void test_heap_walk(void);
|
||||
static void test_remap(void);
|
||||
static void test_remap_realloc(void);
|
||||
|
||||
int main() {
|
||||
mi_version();
|
||||
mi_stats_reset();
|
||||
|
||||
test_remap();
|
||||
test_remap_realloc();
|
||||
|
||||
// detect double frees and heap corruption
|
||||
// double_free1();
|
||||
|
@ -221,18 +222,19 @@ static void test_heap_walk(void) {
|
|||
|
||||
|
||||
static void test_remap(void) {
|
||||
const size_t iterN = 100;
|
||||
const size_t size0 = 64 * 1024 * 1024;
|
||||
const size_t inc = 1024 * 1024;
|
||||
size_t size = size0;
|
||||
uint8_t* p = (uint8_t*)mi_malloc_remappable(size);
|
||||
memset(p, 1, size);
|
||||
for (int i = 2; i < 100; i++) {
|
||||
p = mi_remap(p, size + inc);
|
||||
for (int i = 2; i < iterN; i++) {
|
||||
p = mi_realloc(p, size + inc);
|
||||
memset(p + size, i, inc);
|
||||
size += inc;
|
||||
printf("%3d: increased to size %zu\n", i, size);
|
||||
}
|
||||
for (int i = 1; i < 100; i++) {
|
||||
for (int i = 1; i < iterN; i++) {
|
||||
size_t idx = size0 + ((i - 1) * inc) - 1;
|
||||
uint8_t v = p[idx];
|
||||
if (v != i) {
|
||||
|
@ -243,6 +245,31 @@ static void test_remap(void) {
|
|||
mi_free(p);
|
||||
}
|
||||
|
||||
static void test_remap_realloc(void) {
|
||||
const size_t iterN = 100;
|
||||
const size_t size0 = 64 * 1024 * 1024;
|
||||
const size_t inc = 1024 * 1024;
|
||||
size_t size = size0;
|
||||
uint8_t* p = (uint8_t*)mi_malloc(size);
|
||||
memset(p, 1, size);
|
||||
for (int i = 2; i < iterN; i++) {
|
||||
p = mi_realloc(p, size + inc);
|
||||
memset(p + size, i, inc);
|
||||
size += inc;
|
||||
printf("%3d: increased to size %zu\n", i, size);
|
||||
}
|
||||
for (int i = 1; i < iterN; i++) {
|
||||
size_t idx = size0 + ((i - 1) * inc) - 1;
|
||||
uint8_t v = p[idx];
|
||||
if (v != i) {
|
||||
printf("error: corrupted memory in remap_realloc: i=%d, index=0x%zx, value=%u \n", i, idx, v);
|
||||
abort();
|
||||
};
|
||||
}
|
||||
mi_free(p);
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------
|
||||
// bin size experiments
|
||||
// ------------------------------
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue