對malloc分配的資源做記憶體對齊

2021-10-23 09:10:18 字數 1029 閱讀 3097

記憶體對齊效能原因:資料結構(尤其是棧)應該盡可能地在自然邊界上對齊。原因在於,為了訪問未對齊的記憶體,處理器需要作兩次記憶體訪問;而對齊的記憶體訪問僅需要一次訪問。

個人的一點說明

在c/c++中,使用malloc();動態分配的記憶體是隨機的,如果要對分配的這段記憶體運算比較頻繁,可能有效能上的問題,同時也可能需要移植到不同的硬體平台,也會存在潛在隱患,需要使用記憶體對齊來優化。

那麼優化方法其實很容易,主要借助於兩個相對透明的的關鍵字 max_align_t 和 alignof,

其中 max_align_t 是一種對齊要求至少與每個標量型別一樣嚴格(大小)的型別,

max_align_t通常是最大標量型別的同義詞,在大多數平台上它是長雙倍的,並且其對齊要求為8或16。

alignof : 獲取位址對其的大小,pod裡面最大的記憶體對齊的大小。

下面是一段做對齊的**:

使用malloc分配的位址ptr對aligned_len取餘,即可得到整齊的記憶體邊界位址data_, 以此位址(data_)來作為儲存資料的首位址.

template

<

typename scalar,

int aligned_len>

alignedmatrix

::alignedmatrix

(const alignedmatrix

& matrix)

++ptr;

++idx;

} data_ =

reinterpret_cast

>

(ptr)

;for

(unsigned

int k =

0; k < rows_; k++

)memcpy

(data_, matrix.data_,

sizeof

(scalar)

* rows_ * cols_)

;}

malloc記憶體分配原理

一 malloc的工作機制 它有乙個將可用的記憶體塊連線為乙個長長的列表的所謂空閒鍊錶。呼叫malloc函式時,它沿連線表尋找乙個大到足以滿足使用者請求所需要的記憶體塊。然後,將該記憶體塊一分為二 一塊的大小與使用者請求的大小相等,另一塊的大小就是剩下的位元組 接下來,將分配給使用者的那塊記憶體傳給...

malloc記憶體分配原理

一 malloc的工作機制 它有乙個將可用的記憶體塊連線為乙個長長的列表的所謂空閒鍊錶。呼叫malloc函式時,它沿連線表尋找乙個大到足以滿足使用者請求所需要的記憶體塊。然後,將該記憶體塊一分為二 一塊的大小與使用者請求的大小相等,另一塊的大小就是剩下的位元組 接下來,將分配給使用者的那塊記憶體傳給...

記憶體分配 malloc 和free

一些關於關於記憶體分配 malloc 和free 的基本知識。有關指標 指標是用來存放記憶體位址的,分型別的原因是,指標變數儲存的是乙個記憶體空間的首位址 第乙個位元組的位址 但這個空間占用的位元組和存放的數的型別,是由指標的型別來表明的。系統根據指標型別取相應連續的記憶體作為乙個資料。儲存型別和動...