chunk_mmap.c (235238) | chunk_mmap.c (242844) |
---|---|
1#define JEMALLOC_CHUNK_MMAP_C_ 2#include "jemalloc/internal/jemalloc_internal.h" 3 4/******************************************************************************/ 5/* Function prototypes for non-inline static functions. */ 6 7static void *pages_map(void *addr, size_t size); 8static void pages_unmap(void *addr, size_t size); --- 99 unchanged lines hidden (view full) --- 108 pages_unmap(addr, leadsize); 109 if (trailsize != 0) 110 pages_unmap((void *)((uintptr_t)ret + size), trailsize); 111 return (ret); 112 } 113#endif 114} 115 | 1#define JEMALLOC_CHUNK_MMAP_C_ 2#include "jemalloc/internal/jemalloc_internal.h" 3 4/******************************************************************************/ 5/* Function prototypes for non-inline static functions. */ 6 7static void *pages_map(void *addr, size_t size); 8static void pages_unmap(void *addr, size_t size); --- 99 unchanged lines hidden (view full) --- 108 pages_unmap(addr, leadsize); 109 if (trailsize != 0) 110 pages_unmap((void *)((uintptr_t)ret + size), trailsize); 111 return (ret); 112 } 113#endif 114} 115 |
116void | 116bool |
117pages_purge(void *addr, size_t length) 118{ | 117pages_purge(void *addr, size_t length) 118{ |
119 bool unzeroed; |
|
119 120#ifdef _WIN32 121 VirtualAlloc(addr, length, MEM_RESET, PAGE_READWRITE); | 120 121#ifdef _WIN32 122 VirtualAlloc(addr, length, MEM_RESET, PAGE_READWRITE); |
123 unzeroed = true; |
|
122#else 123# ifdef JEMALLOC_PURGE_MADVISE_DONTNEED 124# define JEMALLOC_MADV_PURGE MADV_DONTNEED | 124#else 125# ifdef JEMALLOC_PURGE_MADVISE_DONTNEED 126# define JEMALLOC_MADV_PURGE MADV_DONTNEED |
127# define JEMALLOC_MADV_ZEROS true |
|
125# elif defined(JEMALLOC_PURGE_MADVISE_FREE) 126# define JEMALLOC_MADV_PURGE MADV_FREE | 128# elif defined(JEMALLOC_PURGE_MADVISE_FREE) 129# define JEMALLOC_MADV_PURGE MADV_FREE |
130# define JEMALLOC_MADV_ZEROS false |
|
127# else 128# error "No method defined for purging unused dirty pages." 129# endif | 131# else 132# error "No method defined for purging unused dirty pages." 133# endif |
130 madvise(addr, length, JEMALLOC_MADV_PURGE); | 134 int err = madvise(addr, length, JEMALLOC_MADV_PURGE); 135 unzeroed = (JEMALLOC_MADV_ZEROS == false || err != 0); 136# undef JEMALLOC_MADV_PURGE 137# undef JEMALLOC_MADV_ZEROS |
131#endif | 138#endif |
139 return (unzeroed); |
|
132} 133 134static void * 135chunk_alloc_mmap_slow(size_t size, size_t alignment, bool *zero) 136{ 137 void *ret, *pages; 138 size_t alloc_size, leadsize; 139 --- 63 unchanged lines hidden --- | 140} 141 142static void * 143chunk_alloc_mmap_slow(size_t size, size_t alignment, bool *zero) 144{ 145 void *ret, *pages; 146 size_t alloc_size, leadsize; 147 --- 63 unchanged lines hidden --- |