33,311
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
void *aligned_malloc(size_t sz, void**ptr){
if(!ptr) return ptr;
*ptr = malloc((sz ? sz : 1)
+ 64 //bound
+ sizeof(void*) //cookie
);
if(!*ptr) return ptr;
*ptr = (char*)*ptr + sizeof(void*);
((void**)((char*)*ptr + 64 - (size_t)((uintptr_t)*ptr & 63U)))[-1] = (char*)*ptr-sizeof(void*);
return (char*)*ptr + 64 - (size_t)((uintptr_t)*ptr & 63U);
}
void aligned_free(void* ptr){
if(ptr){
free(((void**)ptr)[-1]);
}
}
int main()
{
void * p[128];
int i;
for(i = 0; i < 128; ++i){
p[i]= aligned_malloc(i,p + i);
printf("%p\n",p[i]);
}
for(i = 0; i < 128; ++i){
aligned_free(p[i]);
}
}