在C 中實現aligned malloc

2021-10-21 08:36:04 字數 992 閱讀 6551

int

main()

請求了乙個大小為1024的記憶體塊並列印出來,一切都很完美。

我們看看這塊記憶體的位址。

可以看到,在64bit機器上,malloc預設行為會將分配的位址以16-byte對齊,如果我們想改變這種預設行為,提供32-byte或者64-byte對齊,應該怎麼做呢?

從c++17開始,可以使用aligned_alloc函式達到這個目的,但是如果使用較老的c++版本,如c++14,c++11,我們需要手動寫乙個實現。

話不多說,先貼**如下,aligned_malloc和aligned_free,需要配合使用,否則會有記憶體洩漏問題。

#include

void

*aligned_malloc

(size_t size, size_t alignment)

void

aligned_free

(void

* p)

intmain()

新增乙個測試程式,

#include

void

testalignedmalloc()

for(

int i =

0; i < size;

++i)

}int

main()

看看結果,

分配的記憶體位址都是以64-byte為邊界,並且分配的記憶體最後也被成功釋放了,函式是正確的。

本小段主要向不大了解解決思路的小夥伴做一些簡單解釋,程式大佬可以一笑而過哈。

首先我們要明確我們的解決方案,既然malloc分配的指標位址不能達到我們想要的位元組對齊效果,我們就自己來調整這個指標。所以我們的做法是

在C 中實現串列埠通訊

本文主要是講述如何通過c net1.1平台呼叫api操作串列埠,net2.0已經內建串列埠操作類!通常,在c 中實現串列埠通訊,我們有四種方法 第一 通過mscomm控制項這是最簡單的,最方便的方法。可功能上很難做到控制自如,同時這個控制項並不是系統本身所帶,所以還得註冊。可以訪問 乙個外國人寫的教...

在C 中實現列印功能

在.net中可以很方便的實現列印功能。通常可以建立 printdocument 類的例項,設定描述列印方式的屬性,然後呼叫 print 方法開始列印程序。通過使用 printpageeventargs 中包含的 graphics 來處理用於指定列印輸出的 printpage 事件。具體 public...

在C 中實現變長陣列

1.變長一維陣列 這裡說的變長陣列是指在編譯時不能確定陣列長度,程式在執行時需要動態分配記憶體空間的陣列。實現變長陣列最簡單的是變長一維陣列,你可以這樣做 檔名 array01.cpp include using namespace std int main 注意int p new int len ...