201 202 static int vm_allocation_granularity(); 203 static char* reserve_memory(size_t bytes, char* addr = 0, 204 size_t alignment_hint = 0); 205 static char* attempt_reserve_memory_at(size_t bytes, char* addr); 206 static void split_reserved_memory(char *base, size_t size, 207 size_t split, bool realloc); 208 static bool commit_memory(char* addr, size_t bytes, 209 bool executable = false); 210 static bool commit_memory(char* addr, size_t size, size_t alignment_hint, 211 bool executable = false); 212 static bool uncommit_memory(char* addr, size_t bytes); 213 static bool release_memory(char* addr, size_t bytes); 214 215 enum ProtType { MEM_PROT_NONE, MEM_PROT_READ, MEM_PROT_RW, MEM_PROT_RWX }; 216 static bool protect_memory(char* addr, size_t bytes, ProtType prot, 217 bool is_committed = true); 218 219 static bool guard_memory(char* addr, size_t bytes); 220 static bool unguard_memory(char* addr, size_t bytes); 221 static char* map_memory(int fd, const char* file_name, size_t file_offset, 222 char *addr, size_t bytes, bool read_only = false, 223 bool allow_exec = false); 224 static char* remap_memory(int fd, const char* file_name, size_t file_offset, 225 char *addr, size_t bytes, bool read_only, 226 bool allow_exec); 227 static bool unmap_memory(char *addr, size_t bytes); 228 static void free_memory(char *addr, size_t bytes); 229 static void realign_memory(char *addr, size_t bytes, size_t alignment_hint); 230 231 // NUMA-specific interface 232 static bool numa_has_static_binding(); 233 static bool numa_has_group_homing(); 234 static void numa_make_local(char *addr, size_t bytes, int lgrp_hint); 235 static void numa_make_global(char *addr, size_t bytes); 236 static size_t numa_get_groups_num(); 237 static size_t numa_get_leaf_groups(int *ids, size_t size); 238 static bool numa_topology_changed(); 239 static int numa_get_group_id(); 240 | 201 202 static int vm_allocation_granularity(); 203 static char* reserve_memory(size_t bytes, char* addr = 0, 204 size_t alignment_hint = 0); 205 static char* attempt_reserve_memory_at(size_t bytes, char* addr); 206 static void split_reserved_memory(char *base, size_t size, 207 size_t split, bool realloc); 208 static bool commit_memory(char* addr, size_t bytes, 209 bool executable = false); 210 static bool commit_memory(char* addr, size_t size, size_t alignment_hint, 211 bool executable = false); 212 static bool uncommit_memory(char* addr, size_t bytes); 213 static bool release_memory(char* addr, size_t bytes); 214 215 enum ProtType { MEM_PROT_NONE, MEM_PROT_READ, MEM_PROT_RW, MEM_PROT_RWX }; 216 static bool protect_memory(char* addr, size_t bytes, ProtType prot, 217 bool is_committed = true); 218 219 static bool guard_memory(char* addr, size_t bytes); 220 static bool unguard_memory(char* addr, size_t bytes); 221 static bool create_stack_guard_pages(char* addr, size_t bytes); 222 static bool remove_stack_guard_pages(char* addr, size_t bytes); 223 224 static char* map_memory(int fd, const char* file_name, size_t file_offset, 225 char *addr, size_t bytes, bool read_only = false, 226 bool allow_exec = false); 227 static char* remap_memory(int fd, const char* file_name, size_t file_offset, 228 char *addr, size_t bytes, bool read_only, 229 bool allow_exec); 230 static bool unmap_memory(char *addr, size_t bytes); 231 static void free_memory(char *addr, size_t bytes); 232 static void realign_memory(char *addr, size_t bytes, size_t alignment_hint); 233 234 // NUMA-specific interface 235 static bool numa_has_static_binding(); 236 static bool numa_has_group_homing(); 237 static void numa_make_local(char *addr, size_t bytes, int lgrp_hint); 238 static void numa_make_global(char *addr, size_t bytes); 239 static size_t numa_get_groups_num(); 240 static size_t numa_get_leaf_groups(int *ids, size_t size); 241 static bool numa_topology_changed(); 242 static int numa_get_group_id(); 243 |