/* size must be a power of 2 */ void* sgen_alloc_os_memory_aligned (size_t size, mword alignment, gboolean activate) { void *ptr = mono_valloc_aligned (size, alignment, prot_flags_for_activate (activate)); if (ptr) SGEN_ATOMIC_ADD_P (total_alloc, size); return ptr; }
/* size must be a power of 2 */ void* sgen_alloc_os_memory_aligned (size_t size, mword alignment, SgenAllocFlags flags, const char *assert_description) { void *ptr; g_assert (!(flags & ~(SGEN_ALLOC_HEAP | SGEN_ALLOC_ACTIVATE))); ptr = mono_valloc_aligned (size, alignment, prot_flags_for_activate (flags & SGEN_ALLOC_ACTIVATE)); sgen_assert_memory_alloc (ptr, size, assert_description); if (ptr) { SGEN_ATOMIC_ADD_P (total_alloc, size); total_alloc_max = MAX (total_alloc_max, total_alloc); } return ptr; }
static gpointer alloc_sb (Descriptor *desc) { static int pagesize = -1; gpointer sb_header; if (pagesize == -1) pagesize = mono_pagesize (); sb_header = desc->block_size == pagesize ? mono_valloc (0, desc->block_size, prot_flags_for_activate (TRUE)) : mono_valloc_aligned (desc->block_size, desc->block_size, prot_flags_for_activate (TRUE)); g_assert (sb_header == sb_header_for_addr (sb_header, desc->block_size)); *(Descriptor**)sb_header = desc; //g_print ("sb %p for %p\n", sb_header, desc); return (char*)sb_header + LOCK_FREE_ALLOC_SB_HEADER_SIZE; }
static gpointer alloc_sb (Descriptor *desc) { static int pagesize = -1; gpointer sb_header; if (pagesize == -1) pagesize = mono_pagesize (); sb_header = desc->block_size == pagesize ? mono_valloc (NULL, desc->block_size, prot_flags_for_activate (TRUE), desc->heap->account_type) : mono_valloc_aligned (desc->block_size, desc->block_size, prot_flags_for_activate (TRUE), desc->heap->account_type); g_assertf (sb_header, "Failed to allocate memory for the lock free allocator"); g_assert (sb_header == sb_header_for_addr (sb_header, desc->block_size)); *(Descriptor**)sb_header = desc; //g_print ("sb %p for %p\n", sb_header, desc); return (char*)sb_header + LOCK_FREE_ALLOC_SB_HEADER_SIZE; }
/* size must be a power of 2 */ static void* mono_sgen_alloc_os_memory_aligned (size_t size, size_t alignment, gboolean activate) { return mono_valloc_aligned (size, alignment, prot_flags_for_activate (activate)); }