我目前正在閱讀一個程序,用於對齊內存分配和空閒分配的內存。這裏是C代碼:如何用malloc()完成字節對齊?
/**
* Aligned memory allocation
* param[in] size Bytes to be allocated
* param[in] alignment Alignment bytes
* return Address of allocated memory
*/
inline void* _al_malloc(size_t size, size_t alignemt)
{
size_t a = alignment - 1;
size_t word_length = sizeof(void*);
void* raw = malloc(word_length + size + a);
if (!raw)
{
return 0;
}
void* ptr = (void*)((size_t(raw) + word_length + a) & ~a);
*((void**)ptr - 1) = raw;
return ptr;
}
/**
* Free allocated memory
*/
inline void _al_free(void * ptr)
{
if (!ptr)
{
return;
}
void* raw = *((void**)ptr - 1);
free(raw);
}
這些操作如何確保字節對齊的內存?
使用C11'aligned_alloc()',返回的指針可以傳遞給'free()'。 – EOF
它分配額外的內存,然後移動返回的指針的起始地址,以便它正確對齊(可能會留下幾個未使用的字節)。 –
hi @ BoPersson,但爲什麼未使用字節的長度是word_length + a? – CJZ