1. 程式人生 > >在C++中實現aligned_malloc

在C++中實現aligned_malloc

## malloc的預設行為 大家都知道C++中可以直接呼叫malloc請求記憶體被返回分配成功的記憶體指標,該指標指向的地址就是分配得到的記憶體的起始地址。比如下面的程式碼 ```cpp int main() { void *p = malloc(1024); printf("0x%p\n", p); free(p); } ``` 請求了一個大小為1024的記憶體塊並打印出來,一切都很完美。 我們看看這塊記憶體的地址。 ![](https://img2020.cnblogs.com/blog/699616/202103/699616-20210308212033486-945602834.png) 可以看到,在64bit機器上,malloc預設行為會將分配的地址以16-byte對齊,如果我們想改變這種預設行為,提供32-byte或者64-byte對齊,應該怎麼做呢?   ## 實現aligned_malloc ### 原始碼 從C++17開始,可以使用**aligned_alloc**函式達到這個目的,但是如果使用較老的C++版本,如C++14,C++11,我們需要手動寫一個實現。 話不多說,先貼程式碼如下,aligned_malloc和aligned_free,需要配合使用,否則會有記憶體洩漏問題。 ```cpp #