21 #ifndef __TBB_scalable_allocator_H 22 #define __TBB_scalable_allocator_H 30 #if !defined(__cplusplus) && __ICC==1100 31 #pragma warning (push) 32 #pragma warning (disable: 991) 40 #define __TBB_EXPORTED_FUNC __cdecl 42 #define __TBB_EXPORTED_FUNC 131 typedef void *(*rawAllocType)(intptr_t pool_id,
size_t &bytes);
133 typedef int (*rawFreeType)(intptr_t pool_id,
void* raw_ptr,
size_t raw_bytes);
145 struct MemPoolPolicy {
147 TBBMALLOC_POOL_VERSION = 1
157 unsigned fixedPool : 1,
162 MemPoolPolicy(rawAllocType pAlloc_, rawFreeType pFree_,
163 size_t granularity_ = 0,
bool fixedPool_ =
false,
164 bool keepAllMemory_ =
false) :
165 pAlloc(pAlloc_), pFree(pFree_), granularity(granularity_), version(TBBMALLOC_POOL_VERSION),
166 fixedPool(fixedPool_), keepAllMemory(keepAllMemory_),
185 MemPoolError pool_create_v1(intptr_t pool_id,
const MemPoolPolicy *policy,
186 rml::MemoryPool **pool);
188 bool pool_destroy(MemoryPool* memPool);
189 void *pool_malloc(MemoryPool* memPool,
size_t size);
190 void *pool_realloc(MemoryPool* memPool,
void *
object,
size_t size);
191 void *pool_aligned_malloc(MemoryPool* mPool,
size_t size,
size_t alignment);
192 void *pool_aligned_realloc(MemoryPool* mPool,
void *ptr,
size_t size,
size_t alignment);
193 bool pool_reset(MemoryPool* memPool);
194 bool pool_free(MemoryPool *memPool,
void *
object);
195 MemoryPool *pool_identify(
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 216 #if _MSC_VER && !defined(__INTEL_COMPILER) 218 #pragma warning (push) 219 #pragma warning (disable: 4100) 225 #if TBB_USE_EXCEPTIONS 244 class scalable_allocator {
247 typedef value_type* pointer;
248 typedef const value_type* const_pointer;
249 typedef value_type& reference;
250 typedef const value_type& const_reference;
251 typedef size_t size_type;
252 typedef ptrdiff_t difference_type;
253 template<
class U>
struct rebind {
254 typedef scalable_allocator<U> other;
257 scalable_allocator() throw() {}
258 scalable_allocator(
const scalable_allocator& )
throw() {}
259 template<
typename U> scalable_allocator(
const scalable_allocator<U>&)
throw() {}
261 pointer
address(reference x)
const {
return &x;}
262 const_pointer
address(const_reference x)
const {
return &x;}
265 pointer allocate( size_type n,
const void* =0 ) {
266 pointer
p = static_cast<pointer>(
scalable_malloc( n *
sizeof(value_type) ) );
273 void deallocate( pointer
p, size_type ) {
278 size_type max_size()
const throw() {
279 size_type absolutemax = static_cast<size_type>(-1) /
sizeof (value_type);
280 return (absolutemax > 0 ? absolutemax : 1);
282 #if __TBB_ALLOCATOR_CONSTRUCT_VARIADIC 283 template<
typename U,
typename... Args>
284 void construct(U *
p, Args&&... args)
285 { ::new((
void *)
p) U(std::forward<Args>(args)...); }
287 #if __TBB_CPP11_RVALUE_REF_PRESENT 288 void construct( pointer
p, value_type&&
value ) { ::new((
void*)(
p)) value_type(
std::move(
value ) ); }
290 void construct( pointer
p,
const value_type&
value ) {::new((
void*)(
p)) value_type(
value);}
292 void destroy( pointer
p ) {
p->~value_type();}
295 #if _MSC_VER && !defined(__INTEL_COMPILER) 296 #pragma warning (pop) 302 class scalable_allocator<
void> {
304 typedef void* pointer;
305 typedef const void* const_pointer;
306 typedef void value_type;
307 template<
class U>
struct rebind {
308 typedef scalable_allocator<U> other;
312 template<
typename T,
typename U>
313 inline bool operator==(
const scalable_allocator<T>&,
const scalable_allocator<U>& ) {
return true;}
315 template<
typename T,
typename U>
316 inline bool operator!=(
const scalable_allocator<T>&,
const scalable_allocator<U>& ) {
return false;}
321 #if (__TBB_BUILD || __TBBMALLOC_BUILD) && !defined(__TBBMALLOC_NO_IMPLICIT_LINKAGE) 322 #define __TBBMALLOC_NO_IMPLICIT_LINKAGE 1 325 #if !__TBBMALLOC_NO_IMPLICIT_LINKAGE 327 #pragma comment(lib, "tbbmalloc_debug.lib") 329 #pragma comment(lib, "tbbmalloc.lib") 338 #if !defined(__cplusplus) && __ICC==1100 339 #pragma warning (pop) int __TBB_EXPORTED_FUNC scalable_allocation_mode(int param, intptr_t value)
#define __TBB_EXPORTED_FUNC
bool operator==(const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)
void *__TBB_EXPORTED_FUNC scalable_malloc(size_t size)
void const char const char int ITT_FORMAT __itt_group_sync p
void *__TBB_EXPORTED_FUNC scalable_aligned_realloc(void *ptr, size_t size, size_t alignment)
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 size_t size
void *__TBB_EXPORTED_FUNC scalable_realloc(void *ptr, size_t size)
void __TBB_EXPORTED_FUNC scalable_aligned_free(void *ptr)
size_t __TBB_EXPORTED_FUNC scalable_msize(void *ptr)
void move(tbb_thread &t1, tbb_thread &t2)
void *__TBB_EXPORTED_FUNC scalable_calloc(size_t nobj, size_t size)
int __TBB_EXPORTED_FUNC scalable_allocation_command(int cmd, void *param)
void __TBB_EXPORTED_FUNC scalable_free(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 * address
bool operator!=(const cache_aligned_allocator< T > &, const cache_aligned_allocator< U > &)
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
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_malloc(size_t size, size_t alignment)
void throw_exception(exception_id eid)
Versionless convenience wrapper for throw_exception_v4()
#define __TBB_NOINLINE(decl)