ELC in dev
ELC-lang
载入中...
搜索中...
未找到
elc::defs::memory::alloc_n::default_method 命名空间参考

函数

bytebase_realloc (byte *ptr, size_t nsize, size_t align) noexcept
 
bytebase_aligned_alloc (size_t align, size_t size) noexcept
 
void base_free (byte *p, size_t align) noexcept
 
size_t base_get_size_of_alloc (const byte *arg, size_t align) noexcept
 
template<typename T >
voidalloc_method (type_info_t< T >) noexcept
 
template<typename T >
voidalloc_method (type_info_t< T >, size_t size) noexcept
 
template<typename T >
size_t get_size_of_alloc_method (const T *arg) noexcept
 
template<typename T >
void free_method (T *arg) noexcept
 
template<typename T >
voidrealloc_method (T *ptr, size_t new_size) noexcept
 

函数说明

◆ alloc_method() [1/2]

template<typename T >
void * elc::defs::memory::alloc_n::default_method::alloc_method ( type_info_t< T >  )
inlinenoexcept

在文件 all_defs.cpp20790 行定义.

20790 {
20791 //return空指针被允许,会引起gc_for_alloc
20792 return ::std::assume_aligned<alignof(T)>(base_aligned_alloc(alignof(T),sizeof(T)));
20793 }
byte * base_aligned_alloc(size_t align, size_t size) noexcept
函数调用图:
这是这个函数的调用关系图:

◆ alloc_method() [2/2]

template<typename T >
void * elc::defs::memory::alloc_n::default_method::alloc_method ( type_info_t< T >  ,
size_t  size 
)
inlinenoexcept

在文件 all_defs.cpp20795 行定义.

20795 {
20796 //return空指针被允许,会引起gc_for_alloc
20797 //size被保证不为0
20798 if constexpr(type_info<T>.has_attribute(never_in_array))
20799 template_error("You cannot perform array operations on never_in_array type.");
20800 return ::std::assume_aligned<alignof(T)>(base_aligned_alloc(alignof(T),sizeof(T)*size));
20801 }
#define template_error(reason)
Definition all_defs.cpp:559
函数调用图:

◆ base_aligned_alloc()

byte * elc::defs::memory::alloc_n::default_method::base_aligned_alloc ( size_t  align,
size_t  size 
)
inlinenoexcept

Allocates aligned memory.

参数
alignThe alignment of the memory.
sizeThe size of the memory.
返回
A pointer to the allocated memory.

在文件 all_defs.cpp20742 行定义.

20742 {
20743 byte*p=::elc::APIs::alloc::aligned_alloc(align,size);
20744 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
20745 if(p){
20746 ELC_TEST_EVENTNAME("base_aligned_alloc调用");
20747 stest_eventlog(p);
20748 }
20749 #endif
20750 return p;
20751 }
#define ELC_TEST_EVENTNAME(name)
Definition all_defs.cpp:686
byte * aligned_alloc(size_t align, size_t size) noexcept
函数调用图:
这是这个函数的调用关系图:

◆ base_free()

void elc::defs::memory::alloc_n::default_method::base_free ( byte p,
size_t  align 
)
inlinenoexcept

Frees a pointer allocated by base_alloc.

参数
pThe pointer to free.
alignThe alignment of the pointer.

在文件 all_defs.cpp20758 行定义.

20758 {
20759 //传入需释放的数据块起始点与大小(字节)
20760 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
20761 auto tmp=stest_geteventlistfromlog(p);
20762 if(!tmp){
20763 stest_putsf(L"释放了已释放或未分配指针%p,当前的事件记录如下:",p);
20764 stest_printeventlist(stderr,stest_geteventlist());
20765 stest_wait();
20766 return;
20767 }else{
20768 stest_deleteevent(tmp);
20769 stest_uneventlog(p);
20770 }
20771 #endif
20772 ::elc::APIs::alloc::free(p,align);
20773 }
void free(byte *p, size_t align) noexcept
函数调用图:
这是这个函数的调用关系图:

◆ base_get_size_of_alloc()

size_t elc::defs::memory::alloc_n::default_method::base_get_size_of_alloc ( const byte arg,
size_t  align 
)
inlinenoexcept

Computes the size of an allocation.

参数
argThe pointer to the start of the allocation.
alignThe alignment of the allocation.
返回
The size of the allocation.

在文件 all_defs.cpp20782 行定义.

20782 {
20783 //arg保证不与null_ptr相等
20784 const auto tmp= ::elc::APIs::alloc::get_size_of_alloc(arg,align);
20785 return tmp;
20786 }
size_t get_size_of_alloc(const byte *p, size_t align) noexcept
函数调用图:
这是这个函数的调用关系图:

◆ base_realloc()

byte * elc::defs::memory::alloc_n::default_method::base_realloc ( byte ptr,
size_t  nsize,
size_t  align 
)
inlinenoexcept

Reallocates a block of memory.

参数
ptrThe pointer to the block of memory to reallocate.
nsizeThe new size of the block of memory.
alignThe alignment of the block of memory.
返回
The new pointer to the block of memory.

在文件 all_defs.cpp20720 行定义.

20720 {
20721 byte*p=::elc::APIs::alloc::realloc(ptr,nsize,align);
20722 #if defined(ELC_TEST_ON)||defined(ELC_TEST_CHECK_MEMORY_LACK)
20723 if(nsize==0)
20724 stest_uneventlog(ptr);
20725 if(p){
20726 ELC_TEST_EVENTNAME("base_realloc调用");
20727 if(p!=ptr)
20728 stest_uneventlog(ptr);
20729 stest_eventlog(p);
20730 }
20731 #endif
20732 return p;
20733 }
byte * realloc(byte *ptr, size_t nsize, size_t align) noexcept
函数调用图:
这是这个函数的调用关系图:

◆ free_method()

template<typename T >
void elc::defs::memory::alloc_n::default_method::free_method ( T *  arg)
inlinenoexcept

在文件 all_defs.cpp20808 行定义.

20808 {
20809 base_free(cast_to_data(arg),alignof(T));
20810 }
constexpr byte * cast_to_data(T *p) noexcept
void base_free(byte *p, size_t align) noexcept
函数调用图:
这是这个函数的调用关系图:

◆ get_size_of_alloc_method()

template<typename T >
size_t elc::defs::memory::alloc_n::default_method::get_size_of_alloc_method ( const T *  arg)
inlinenoexcept

在文件 all_defs.cpp20803 行定义.

20803 {
20804 //arg保证不与null_ptr相等
20805 return base_get_size_of_alloc(cast_to_data(arg),alignof(T))/sizeof(T);
20806 }
size_t base_get_size_of_alloc(const byte *arg, size_t align) noexcept
函数调用图:
这是这个函数的调用关系图:

◆ realloc_method()

template<typename T >
void * elc::defs::memory::alloc_n::default_method::realloc_method ( T *  ptr,
size_t  new_size 
)
inlinenoexcept

在文件 all_defs.cpp20812 行定义.

20812 {
20813 //return空指针被允许,会引起gc_for_alloc,但ptr值必须保持有效以保证gc_for_alloc后再次realloc有效
20814 //new_size被保证不为0
20815 //align维持不变
20816 //但只允许在扩大数据块时可选的移动数据块
20817 if constexpr(type_info<T>.has_attribute(never_in_array))
20818 template_error("You cannot perform array operations on never_in_array type.");
20819 return reinterpret_cast<T*>(base_realloc(cast_to_data(ptr),sizeof(T)*new_size,alignof(T)));
20820 }
byte * base_realloc(byte *ptr, size_t nsize, size_t align) noexcept
函数调用图:
这是这个函数的调用关系图: