mirror of
https://github.com/jemalloc/jemalloc.git
synced 2026-08-14 19:43:38 +03:00
Add a pages_purge function to wrap madvise(JEMALLOC_MADV_PURGE) calls
This will be used to implement the feature on mingw, which doesn't have madvise.
This commit is contained in:
parent
e38e45743f
commit
666c5bf7a8
6 changed files with 20 additions and 10 deletions
|
|
@ -676,8 +676,8 @@ arena_chunk_purge(arena_t *arena, arena_chunk_t *chunk)
|
|||
if (config_debug)
|
||||
ndirty -= npages;
|
||||
|
||||
madvise((void *)((uintptr_t)chunk + (pageind << LG_PAGE)),
|
||||
(npages << LG_PAGE), JEMALLOC_MADV_PURGE);
|
||||
pages_purge((void *)((uintptr_t)chunk + (pageind << LG_PAGE)),
|
||||
(npages << LG_PAGE));
|
||||
if (config_stats)
|
||||
nmadvise++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -171,7 +171,7 @@ chunk_record(void *chunk, size_t size)
|
|||
{
|
||||
extent_node_t *xnode, *node, *prev, key;
|
||||
|
||||
madvise(chunk, size, JEMALLOC_MADV_PURGE);
|
||||
pages_purge(chunk, size);
|
||||
|
||||
xnode = NULL;
|
||||
malloc_mutex_lock(&chunks_mtx);
|
||||
|
|
|
|||
|
|
@ -72,6 +72,20 @@ pages_unmap(void *addr, size_t size)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
pages_purge(void *addr, size_t length)
|
||||
{
|
||||
|
||||
#ifdef JEMALLOC_PURGE_MADVISE_DONTNEED
|
||||
# define JEMALLOC_MADV_PURGE MADV_DONTNEED
|
||||
#elif defined(JEMALLOC_PURGE_MADVISE_FREE)
|
||||
# define JEMALLOC_MADV_PURGE MADV_FREE
|
||||
#else
|
||||
# error "No method defined for purging unused dirty pages."
|
||||
#endif
|
||||
madvise(addr, length, JEMALLOC_MADV_PURGE);
|
||||
}
|
||||
|
||||
static void *
|
||||
chunk_alloc_mmap_slow(size_t size, size_t alignment, bool unaligned)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue