зеркало из https://github.com/microsoft/snmalloc.git
New option to name reserved pages.
This commit is contained in:
Родитель
848a7b1499
Коммит
bf54eeb7be
|
@ -24,6 +24,7 @@ cmake_dependent_option(SNMALLOC_STATIC_LIBRARY "Build static libraries" ON "NOT
|
||||||
cmake_dependent_option(SNMALLOC_MEMCPY_BOUNDS "Perform bounds checks on memcpy with heap objects" OFF "NOT SNMALLOC_HEADER_ONLY_LIBRARY" OFF)
|
cmake_dependent_option(SNMALLOC_MEMCPY_BOUNDS "Perform bounds checks on memcpy with heap objects" OFF "NOT SNMALLOC_HEADER_ONLY_LIBRARY" OFF)
|
||||||
cmake_dependent_option(SNMALLOC_CHECK_LOADS "Perform bounds checks on the source argument to memcpy with heap objects" OFF "SNMALLOC_MEMCPY_BOUNDS" OFF)
|
cmake_dependent_option(SNMALLOC_CHECK_LOADS "Perform bounds checks on the source argument to memcpy with heap objects" OFF "SNMALLOC_MEMCPY_BOUNDS" OFF)
|
||||||
cmake_dependent_option(SNMALLOC_OPTIMISE_FOR_CURRENT_MACHINE "Compile for current machine architecture" Off "NOT SNMALLOC_HEADER_ONLY_LIBRARY" OFF)
|
cmake_dependent_option(SNMALLOC_OPTIMISE_FOR_CURRENT_MACHINE "Compile for current machine architecture" Off "NOT SNMALLOC_HEADER_ONLY_LIBRARY" OFF)
|
||||||
|
cmake_dependent_option(SNMALLOC_PAGEID "Set an id to memory regions" OFF "NOT SNMALLOC_PAGEID" OFF)
|
||||||
if (NOT SNMALLOC_HEADER_ONLY_LIBRARY)
|
if (NOT SNMALLOC_HEADER_ONLY_LIBRARY)
|
||||||
# Pick a sensible default for the thread cleanup mechanism
|
# Pick a sensible default for the thread cleanup mechanism
|
||||||
if (${CMAKE_SYSTEM_NAME} STREQUAL FreeBSD)
|
if (${CMAKE_SYSTEM_NAME} STREQUAL FreeBSD)
|
||||||
|
@ -323,6 +324,8 @@ if(NOT SNMALLOC_HEADER_ONLY_LIBRARY)
|
||||||
|
|
||||||
target_compile_definitions(${name} PRIVATE
|
target_compile_definitions(${name} PRIVATE
|
||||||
SNMALLOC_CHECK_LOADS=$<IF:$<BOOL:${SNMALLOC_CHECK_LOADS}>,true,false>)
|
SNMALLOC_CHECK_LOADS=$<IF:$<BOOL:${SNMALLOC_CHECK_LOADS}>,true,false>)
|
||||||
|
target_compile_definitions(${name} PRIVATE
|
||||||
|
SNMALLOC_PAGEID=$<IF:$<BOOL:${SNMALLOC_PAGEID}>,true,false>)
|
||||||
|
|
||||||
install(TARGETS ${name} EXPORT snmallocConfig)
|
install(TARGETS ${name} EXPORT snmallocConfig)
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
# include <string.h>
|
# include <string.h>
|
||||||
# include <sys/mman.h>
|
# include <sys/mman.h>
|
||||||
|
# include <sys/prctl.h>
|
||||||
# include <syscall.h>
|
# include <syscall.h>
|
||||||
|
|
||||||
extern "C" int puts(const char* str);
|
extern "C" int puts(const char* str);
|
||||||
|
@ -38,7 +39,32 @@ namespace snmalloc
|
||||||
{
|
{
|
||||||
void* p = PALPOSIX<PALLinux>::reserve(size);
|
void* p = PALPOSIX<PALLinux>::reserve(size);
|
||||||
if (p)
|
if (p)
|
||||||
|
{
|
||||||
madvise(p, size, MADV_DONTDUMP);
|
madvise(p, size, MADV_DONTDUMP);
|
||||||
|
# ifdef SNMALLOC_PAGEID
|
||||||
|
# ifndef PR_SET_VMA
|
||||||
|
# define PR_SET_VMA 0x53564d41
|
||||||
|
# define PR_SET_VMA_ANON_NAME 0
|
||||||
|
# endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* If the kernel is set with CONFIG_ANON_VMA_NAME
|
||||||
|
* the reserved pages would appear as follow
|
||||||
|
*
|
||||||
|
* 7fa5f0ceb000-7fa5f0e00000 rw-p 00000000 00:00 0 [anon:snmalloc]
|
||||||
|
* 7fa5f0e00000-7fa5f1800000 rw-p 00000000 00:00 0 [anon:snmalloc]
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
prctl(
|
||||||
|
PR_SET_VMA,
|
||||||
|
PR_SET_VMA_ANON_NAME,
|
||||||
|
(unsigned long)p,
|
||||||
|
size,
|
||||||
|
(unsigned long)"snmalloc");
|
||||||
|
# endif
|
||||||
|
}
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче