大家好,最近針對對齊部分想進一步了解
在stackoverflow上看到這個問題
The memset_16aligned function requires a 16-byte aligned pointer passed to it,
or it will crash.
a) How would you allocate 1024 bytes of memory, and align it to a 16 byte
boundary?
b) Free the memory after the memset_16aligned has executed.
Ans:
{
void *mem = malloc(1024+15);
void *ptr = ((uintptr_t)mem+15) & ~ (uintptr_t)0x0F;
memset_16aligned(ptr, 0, 1024);
free(mem);
}
==============================
題目有人講意思講的不精確,應該講塞的下1024B且對移16Byte~
我這邊想問兩個問題請教
(1) 為何malloc(1024"+15")? 看網站上是說要確定size足夠
但是1024本身不是已經是足夠的嗎?
(2) ((uintptr_t)mem+15) & ~ (uintptr_t)0x0F;
這部分我有看到wiki也是這樣列公式,但是自己待一些16進位位置還是感覺不大
我自己第一個想法是mem+16 & ~.... , 雖然也是可行
但大家說15就足夠,這部分是為什麼呢?
以上請大家指教 3Q