C 语言序言和结尾的 Malloc 实现
Malloc implementation for prologue and epilogue in C
我有一个任务是编写my_free()
和my_malloc()
函数。
但是我们如何创建尾声和序言以正确错位页眉和页脚?
假设我们使用 sbrk()
从堆中请求 4096 bytes
。
我有吗
void* my_malloc(size_t size)
{
void* heapspace = sbrk();
heapspace += 8 // ?? Do i do this to create epilogue?
}
heapspace += 8;
不会对齐任何东西。如果你需要8字节对齐,你在未对齐的地址上加8,结果也是一样的未对齐。
您需要:
void *align(void *ptr, unsigned alignment)
{
uintptr_t addr = (uintptr_t)ptr;
if(addr % alignment)
{
addr = ((addr / alignment) + 1) * alignment;
}
return (void *)addr;
}
void* my_malloc(size_t size)
{
char* heapspace = sbrk();
heapspace += sizeof(size); //example header size
heapspace = align(heapspace, 8);
}
我有一个任务是编写my_free()
和my_malloc()
函数。
但是我们如何创建尾声和序言以正确错位页眉和页脚?
假设我们使用 sbrk()
从堆中请求 4096 bytes
。
我有吗
void* my_malloc(size_t size)
{
void* heapspace = sbrk();
heapspace += 8 // ?? Do i do this to create epilogue?
}
heapspace += 8;
不会对齐任何东西。如果你需要8字节对齐,你在未对齐的地址上加8,结果也是一样的未对齐。
您需要:
void *align(void *ptr, unsigned alignment)
{
uintptr_t addr = (uintptr_t)ptr;
if(addr % alignment)
{
addr = ((addr / alignment) + 1) * alignment;
}
return (void *)addr;
}
void* my_malloc(size_t size)
{
char* heapspace = sbrk();
heapspace += sizeof(size); //example header size
heapspace = align(heapspace, 8);
}