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 127 typedef void *(*rawAllocType)(intptr_t pool_id,
size_t &bytes);
129 typedef int (*rawFreeType)(intptr_t pool_id,
void* raw_ptr,
size_t raw_bytes);
141 struct MemPoolPolicy {
143 TBBMALLOC_POOL_VERSION = 1
153 unsigned fixedPool : 1,
158 MemPoolPolicy(rawAllocType pAlloc_, rawFreeType pFree_,
159 size_t granularity_ = 0,
bool fixedPool_ =
false,
160 bool keepAllMemory_ =
false) :
161 pAlloc(pAlloc_), pFree(pFree_), granularity(granularity_), version(TBBMALLOC_POOL_VERSION),
162 fixedPool(fixedPool_), keepAllMemory(keepAllMemory_),
181 MemPoolError pool_create_v1(intptr_t pool_id,
const MemPoolPolicy *policy,
182 rml::MemoryPool **pool);
184 bool pool_destroy(MemoryPool* memPool);
185 void *pool_malloc(MemoryPool* memPool,
size_t size);
186 void *pool_realloc(MemoryPool* memPool,
void *
object,
size_t size);
187 void *pool_aligned_malloc(MemoryPool* mPool,
size_t size,
size_t alignment);
188 void *pool_aligned_realloc(MemoryPool* mPool,
void *ptr,
size_t size,
size_t alignment);
189 bool pool_reset(MemoryPool* memPool);
190 bool pool_free(MemoryPool *memPool,
void *
object);
191 MemoryPool *pool_identify(
void *
object);
192 size_t pool_msize(MemoryPool *memPool,
void *
object);
199 #ifndef __TBB_NO_IMPLICIT_LINKAGE 200 #define __TBB_NO_IMPLICIT_LINKAGE 1 202 #undef __TBB_NO_IMPLICIT_LINKAGE 207 #if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC 211 #if __TBB_CPP17_MEMORY_RESOURCE_PRESENT 212 #include <memory_resource> 217 #if _MSC_VER && !defined(__INTEL_COMPILER) 219 #pragma warning (push) 220 #pragma warning (disable: 4100) 226 #if TBB_USE_EXCEPTIONS 245 class scalable_allocator {
248 typedef value_type* pointer;
249 typedef const value_type* const_pointer;
250 typedef value_type& reference;
251 typedef const value_type& const_reference;
252 typedef size_t size_type;
253 typedef ptrdiff_t difference_type;
254 template<
class U>
struct rebind {
255 typedef scalable_allocator<U> other;
258 scalable_allocator() throw() {}
259 scalable_allocator(
const scalable_allocator& )
throw() {}
260 template<
typename U> scalable_allocator(
const scalable_allocator<U>&)
throw() {}
262 pointer
address(reference x)
const {
return &x;}
263 const_pointer
address(const_reference x)
const {
return &x;}
266 pointer allocate( size_type n,
const void* =0 ) {
267 pointer
p = static_cast<pointer>(
scalable_malloc( n *
sizeof(value_type) ) );
274 void deallocate( pointer
p, size_type ) {
279 size_type max_size()
const throw() {
280 size_type absolutemax = static_cast<size_type>(-1) /
sizeof (value_type);
281 return (absolutemax > 0 ? absolutemax : 1);
283 #if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC 284 template<
typename U,
typename... Args>
285 void construct(U *
p, Args&&... args)
286 { ::new((
void *)
p) U(std::forward<Args>(args)...); }
288 #if __TBB_CPP11_RVALUE_REF_PRESENT 289 void construct( pointer
p, value_type&&
value ) { ::new((
void*)(
p)) value_type(
std::move(
value ) ); }
291 void construct( pointer
p,
const value_type&
value ) {::new((
void*)(
p)) value_type(
value);}
293 void destroy( pointer
p ) {
p->~value_type();}
296 #if _MSC_VER && !defined(__INTEL_COMPILER) 297 #pragma warning (pop) 303 class scalable_allocator<
void> {
305 typedef void* pointer;
306 typedef const void* const_pointer;
307 typedef void value_type;
308 template<
class U>
struct rebind {
309 typedef scalable_allocator<U> other;
313 template<
typename T,
typename U>
314 inline bool operator==(
const scalable_allocator<T>&,
const scalable_allocator<U>& ) {
return true;}
316 template<
typename T,
typename U>
317 inline bool operator!=(
const scalable_allocator<T>&,
const scalable_allocator<U>& ) {
return false;}
319 #if __TBB_CPP17_MEMORY_RESOURCE_PRESENT 325 class scalable_resource_impl :
public std::pmr::memory_resource {
327 void* do_allocate(
size_t bytes,
size_t alignment)
override {
335 void do_deallocate(
void* ptr,
size_t ,
size_t )
override {
341 bool do_is_equal(
const std::pmr::memory_resource& other)
const noexcept
override {
342 return this == &other ||
343 #if __TBB_USE_OPTIONAL_RTTI 344 dynamic_cast<const scalable_resource_impl*>(&other) != NULL;
354 inline std::pmr::memory_resource* scalable_memory_resource() noexcept {
355 static tbb::internal::scalable_resource_impl scalable_res;
356 return &scalable_res;
364 #if (__TBB_BUILD || __TBBMALLOC_BUILD) && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE) 365 #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1 368 #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE 370 #pragma comment(lib, "tbbmalloc_debug.lib") 372 #pragma comment(lib, "tbbmalloc.lib") 381 #if !defined(__cplusplus) && __ICC==1100 382 #pragma warning (pop) void *__TBB_EXPORTED_FUNC scalable_aligned_malloc(size_t size, size_t alignment)
size_t __TBB_EXPORTED_FUNC scalable_msize(void *ptr)
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_calloc(size_t nobj, size_t size)
#define __TBB_EXPORTED_FUNC
void move(tbb_thread &t1, tbb_thread &t2)
bool operator!=(const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)
void *__TBB_EXPORTED_FUNC scalable_aligned_realloc(void *ptr, size_t size, size_t alignment)
void __TBB_EXPORTED_FUNC scalable_free(void *ptr)
void *__TBB_EXPORTED_FUNC scalable_realloc(void *ptr, 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 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 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_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
bool operator==(const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)
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 * address
void *__TBB_EXPORTED_FUNC scalable_malloc(size_t size)
void const char const char int ITT_FORMAT __itt_group_sync p
int __TBB_EXPORTED_FUNC scalable_posix_memalign(void **memptr, size_t alignment, size_t size)
int __TBB_EXPORTED_FUNC scalable_allocation_mode(int param, intptr_t value)
void __TBB_EXPORTED_FUNC scalable_aligned_free(void *ptr)
#define __TBB_NOINLINE(decl)
int __TBB_EXPORTED_FUNC scalable_allocation_command(int cmd, void *param)