malloc alignment

来源:互联网 发布:沥青路面厚度设计软件 编辑:程序博客网 时间:2024/06/12 20:32
#include <stdio.h>#include <stdlib.h>void *my_malloc(int size , int align){    if(size <= 0 || align <= 0)        return NULL;            int real_size = size + align;    real_size += sizeof(void *);        void *ptr = malloc(real_size);//  printf("old address : %p\n" , ptr);     if(NULL == ptr)        return NULL;    void *old = ptr;    unsigned long value = (unsigned long)ptr;    if(!(value % align))    {        value += align;     }    else     {        value = (value / align + 1) * align;    }    ptr = (void *)value;    *(void **)((char *)ptr - sizeof(void *)) = old;    return ptr;}void my_free(void *ptr){    void *old = *(void **)((char *)ptr + sizeof(void *));    free(old);}int main(){    void *ptr = my_malloc(1000 , 1024);    printf("first address : %p\n" , ptr);        my_free(ptr);    return 0;}

// second edition

void *_aligned_malloc(size_t size){    void *tempPtr = malloc(size + 4);    char offset = 4 - ((int)tempPtr % 4);    char *alignedPtr = (char*)tempPtr + offset;    alignedPtr[-1] = offset;    return (void*)alignedPtr;}void _aligned_free(void *ptr){    char offset = ((char*)ptr)[-1];    free((char*)ptr - offset);}


0 0