17 #ifndef __TBB_scalable_allocator_H    18 #define __TBB_scalable_allocator_H    26 #if !defined(__cplusplus) && __ICC==1100    27     #pragma warning (push)    28     #pragma warning (disable: 991)    36 #define __TBB_EXPORTED_FUNC   __cdecl    38 #define __TBB_EXPORTED_FUNC   130 typedef void *(*rawAllocType)(intptr_t pool_id, 
size_t &bytes);
   132 typedef int   (*rawFreeType)(intptr_t pool_id, 
void* raw_ptr, 
size_t raw_bytes);
   144 struct MemPoolPolicy {
   146         TBBMALLOC_POOL_VERSION = 1
   156     unsigned     fixedPool : 1,
   161     MemPoolPolicy(rawAllocType pAlloc_, rawFreeType pFree_,
   162                   size_t granularity_ = 0, 
bool fixedPool_ = 
false,
   163                   bool keepAllMemory_ = 
false) :
   164         pAlloc(pAlloc_), pFree(pFree_), granularity(granularity_), version(TBBMALLOC_POOL_VERSION),
   165         fixedPool(fixedPool_), keepAllMemory(keepAllMemory_),
   184 MemPoolError pool_create_v1(intptr_t pool_id, 
const MemPoolPolicy *policy,
   185                             rml::MemoryPool **pool);
   187 bool  pool_destroy(MemoryPool* memPool);
   188 void *pool_malloc(MemoryPool* memPool, 
size_t size);
   189 void *pool_realloc(MemoryPool* memPool, 
void *
object, 
size_t size);
   190 void *pool_aligned_malloc(MemoryPool* mPool, 
size_t size, 
size_t alignment);
   191 void *pool_aligned_realloc(MemoryPool* mPool, 
void *ptr, 
size_t size, 
size_t alignment);
   192 bool  pool_reset(MemoryPool* memPool);
   193 bool  pool_free(MemoryPool *memPool, 
void *
object);
   194 MemoryPool *pool_identify(
void *
object);
   195 size_t pool_msize(MemoryPool *memPool, 
void *
object);
   202 #ifndef __TBB_NO_IMPLICIT_LINKAGE   203     #define __TBB_NO_IMPLICIT_LINKAGE 1   205     #undef  __TBB_NO_IMPLICIT_LINKAGE   210 #if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC   214 #if __TBB_CPP17_MEMORY_RESOURCE_PRESENT   215 #include <memory_resource>   220 #if _MSC_VER && !defined(__INTEL_COMPILER)   222     #pragma warning (push)   223     #pragma warning (disable: 4100)   229 #if TBB_USE_EXCEPTIONS   248 class scalable_allocator {
   251     typedef value_type* pointer;
   252     typedef const value_type* const_pointer;
   253     typedef value_type& reference;
   254     typedef const value_type& const_reference;
   255     typedef size_t size_type;
   256     typedef ptrdiff_t difference_type;
   257     template<
class U> 
struct rebind {
   258         typedef scalable_allocator<U> other;
   261     scalable_allocator() throw() {}
   262     scalable_allocator( 
const scalable_allocator& ) 
throw() {}
   263     template<
typename U> scalable_allocator(
const scalable_allocator<U>&) 
throw() {}
   265     pointer 
address(reference x)
 const {
return &x;}
   266     const_pointer 
address(const_reference x)
 const {
return &x;}
   269     pointer allocate( size_type n, 
const void*  =0 ) {
   270         pointer 
p = static_cast<pointer>( 
scalable_malloc( n * 
sizeof(value_type) ) );
   277     void deallocate( pointer 
p, size_type ) {
   282     size_type max_size() 
const throw() {
   283         size_type absolutemax = static_cast<size_type>(-1) / 
sizeof (value_type);
   284         return (absolutemax > 0 ? absolutemax : 1);
   286 #if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC   287     template<
typename U, 
typename... Args>
   288     void construct(U *
p, Args&&... args)
   289         { ::new((
void *)
p) U(std::forward<Args>(args)...); }
   291 #if __TBB_CPP11_RVALUE_REF_PRESENT   292     void construct( pointer 
p, value_type&& 
value ) { ::new((
void*)(
p)) value_type( 
std::move( 
value ) ); }
   294     void construct( pointer 
p, 
const value_type& 
value ) {::new((
void*)(
p)) value_type(
value);}
   296     void destroy( pointer 
p ) {
p->~value_type();}
   299 #if _MSC_VER && !defined(__INTEL_COMPILER)   300     #pragma warning (pop)   306 class scalable_allocator<
void> {
   308     typedef void* pointer;
   309     typedef const void* const_pointer;
   310     typedef void value_type;
   311     template<
class U> 
struct rebind {
   312         typedef scalable_allocator<U> other;
   316 template<
typename T, 
typename U>
   317 inline bool operator==( 
const scalable_allocator<T>&, 
const scalable_allocator<U>& ) {
return true;}
   319 template<
typename T, 
typename U>
   320 inline bool operator!=( 
const scalable_allocator<T>&, 
const scalable_allocator<U>& ) {
return false;}
   322 #if __TBB_CPP17_MEMORY_RESOURCE_PRESENT   328 class scalable_resource_impl : 
public std::pmr::memory_resource {
   330     void* do_allocate(
size_t bytes, 
size_t alignment)
 override {
   338     void do_deallocate(
void* ptr, 
size_t , 
size_t )
 override {
   344     bool do_is_equal(
const std::pmr::memory_resource& other) 
const noexcept 
override {
   345         return this == &other ||
   346 #if __TBB_USE_OPTIONAL_RTTI   347             dynamic_cast<const scalable_resource_impl*>(&other) != NULL;
   357 inline std::pmr::memory_resource* scalable_memory_resource() noexcept {
   358     static tbb::internal::scalable_resource_impl scalable_res;
   359     return &scalable_res;
   367     #if (__TBB_BUILD || __TBBMALLOC_BUILD) && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE)   368         #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1   371     #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE   373             #pragma comment(lib, "tbbmalloc_debug.lib")   375             #pragma comment(lib, "tbbmalloc.lib")   384 #if !defined(__cplusplus) && __ICC==1100   385     #pragma warning (pop) 
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t size
 
void *__TBB_EXPORTED_FUNC scalable_aligned_malloc(size_t size, size_t alignment)
 
size_t __TBB_EXPORTED_FUNC scalable_msize(void *ptr)
 
bool operator!=(const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)
 
#define __TBB_NOINLINE(decl)
 
int __TBB_EXPORTED_FUNC scalable_allocation_command(int cmd, void *param)
 
void *__TBB_EXPORTED_FUNC scalable_aligned_realloc(void *ptr, size_t size, size_t alignment)
 
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark d int
 
void const char const char int ITT_FORMAT __itt_group_sync p
 
#define __TBB_EXPORTED_FUNC
 
void *__TBB_EXPORTED_FUNC scalable_calloc(size_t nobj, size_t size)
 
int __TBB_EXPORTED_FUNC scalable_posix_memalign(void **memptr, size_t alignment, size_t size)
 
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void * address
 
void __TBB_EXPORTED_FUNC scalable_free(void *ptr)
 
void *__TBB_EXPORTED_FUNC scalable_malloc(size_t size)
 
void *__TBB_EXPORTED_FUNC scalable_realloc(void *ptr, size_t size)
 
void throw_exception(exception_id eid)
Versionless convenience wrapper for throw_exception_v4()
 
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value
 
void __TBB_EXPORTED_FUNC scalable_aligned_free(void *ptr)
 
int __TBB_EXPORTED_FUNC scalable_allocation_mode(int param, intptr_t value)
 
bool operator==(const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)
 
void move(tbb_thread &t1, tbb_thread &t2)