zhifu gao
2024-03-04 d2c1204d91d7c98be7998e3966bd82e22750293b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "precomp.h"
 
namespace funasr {
void *AlignedMalloc(size_t alignment, size_t required_bytes)
{
    void *p1;  // original block
    void **p2; // aligned block
    int offset = alignment - 1 + sizeof(void *);
    if ((p1 = (void *)malloc(required_bytes + offset)) == nullptr) {
        return nullptr;
    }
    p2 = (void **)(((size_t)(p1) + offset) & ~(alignment - 1));
    p2[-1] = p1;
    return p2;
}
 
void AlignedFree(void *p)
{
    free(((void **)p)[-1]);
}
} // namespace funasr