[add]posix_memalign

This commit is contained in:
2024-11-15 15:44:16 +08:00
parent c525507ed8
commit 03971211ef

View File

@ -27,10 +27,20 @@
#pragma import(__use_no_heap) #pragma import(__use_no_heap)
#endif /* __CC_ARM */ #endif /* __CC_ARM */
#if defined (__clang__) && defined (RT_USING_CPLUSPLUS)
#define RT_USING_POSIX_MEMALIGN
#endif
#include <sys/errno.h>
void *malloc(size_t n) void *malloc(size_t n)
{ {
#ifdef RT_USING_HEAP #ifdef RT_USING_HEAP
#ifndef RT_USING_POSIX_MEMALIGN
return rt_malloc(n); return rt_malloc(n);
#else
return rt_malloc_align(n, RT_ALIGN_SIZE);
#endif
#else #else
_NO_HEAP_ERROR(); _NO_HEAP_ERROR();
return RT_NULL; return RT_NULL;
@ -63,9 +73,36 @@ RTM_EXPORT(calloc);
void free(void *rmem) void free(void *rmem)
{ {
#ifdef RT_USING_HEAP #ifdef RT_USING_HEAP
#ifndef RT_USING_POSIX_MEMALIGN
rt_free(rmem); rt_free(rmem);
#else
rt_free_align(rmem);
#endif
#else #else
_NO_HEAP_ERROR(); _NO_HEAP_ERROR();
#endif #endif
} }
RTM_EXPORT(free); RTM_EXPORT(free);
#if defined RT_USING_POSIX_MEMALIGN
int posix_memalign(void **ptr, size_t align, size_t size)
{
if ((align & (align - 1)) != 0)
{
return -EINVAL;
}
if(align != RT_ALIGN(align, sizeof(void *)))
{
return -EINVAL;
}
*ptr = rt_malloc_align(size, align);
if(*ptr == RT_NULL)
{
return -ENOMEM;
}
return 0;
}
#endif