動態分配記憶體返回位址對齊的指標

2021-07-09 13:44:37 字數 612 閱讀 6115

int mallocedmemory = (int )malloc(1024+15);

alignedmemory = (int *)(((int)mallocedmemory + 15) & ~15);

((void **)alignedmemory)[-1] = mallocedmemory;

return alignedmemory;

+15 而不是 +16的原因

例: 位址 0x00 + 15 變成 0x0f,通過& ~15,還是變為0x00,這樣本身乙個16位元組對齊的位址就不會浪費16個位元組了

位址 0x00 + 16 變成 0x10,通過& ~15,還是變為0x10,這樣本身乙個16位元組對齊的位址就會浪費16個位元組

((void **)alignedmemory)[-1] = mallocedmemory目的是存放mallocedmemory的位址,放在返回指標的前面乙個位址

// 基本思想是如果要獲取乙個能被n整除的數,只需要在任意大於0的自然數m加上n-1即可,然後從m到m+n-1中找到能被16整除的數字

通過& ~15操作其實就是把低4位置為0,第5位為2的四次方,第6位為2的5次方均能被16位整除,所以只要將低4位置為0就能被16整除

指標學習十三 指標動態分配記憶體

定義在stdlib.h裡 void malloc unsigned size 再記憶體的動態儲存中分配一連續空間,長度為size。申請成功,返回指向所分配記憶體空間的 的起始位址的指標 否則返回null 動態分配n個整數型別大小的的空間,呼叫malloc時,利用sizeof計算儲存塊大小 if p ...

記憶體動態分配

陣列的元素儲存於記憶體中連續的位置上。當乙個陣列被宣告時,它所需要的內存在編譯時就被分配。但是,你也可以使用動態記憶體分配在執行時為它分配記憶體。malloc所分配的是一塊連續的記憶體。例如,如果請求它分配100個位元組的記憶體,那麼它實際分配的記憶體就是100個連續的位元組,並不會分開位於兩塊或多...

動態分配記憶體

動態記憶體分配即分配記憶體大小在執行時才確定,一般在堆中分配。c語言動態記憶體分配相關的函式。include void malloc size t size malloc的使用比較直接,乙個成功的malloc呼叫返回分配的size大小的記憶體的指標。失敗時返回null並將錯誤 置為enomem。教材...