在C++中實現aligned_malloc
阿新 • • 發佈:2021-03-09
## 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
#