malloc_align(malloc内存对齐)

malloc_align(malloc内存对齐)

一般嵌入式设备32bitMCU的RAM和FLASH读写是4字节对齐的,使用malloc申请内存时需要注意,否则会发生fata error。程序第一次动态申请正常,第二次申请出错,大概率是因为没有字节对齐。

#include 
#include 
#include 
 
void* aligned_malloc(size_t required_bytes, size_t alignment)
{
    int offset = alignment - 1 + sizeof(void*);
    void* p1 = (void*)malloc(required_bytes + offset);
    if (p1 == NULL)
        return NULL;

    void** p2 = (void**)( ( (size_t)p1 + offset ) & ~(alignment - 1) );
    p2[-1] = p1;

    return p2;
}
 
void aligned_free(void *p2)
{
    void* p1 = ((void**)p2)[-1];
    free(p1);
}
 
int main()
{
    void * p[128];
    int i;

    for(i = 0; i < 128; ++i)
    {
        p[i] = aligned_malloc(i, 16);
        printf("%p\n", p[i]);
    }

    for(i = 0; i < 128; ++i)
    {
        aligned_free( p[i] );
    }

    return 0;
}

你可能感兴趣的:(基本算法,算法,malloc,动态内存,申请内存,字节对齐)