動態記憶體申請對齊有什麼意義?

時間 2021-05-31 05:40:30

1樓:張砸鍋

好管理。

就像乙個櫃子,如果東西亂七八糟的堆在裡面,想把不用的扔掉,不好找不好扔;就算找出來扔了,它空出來的那個位置想放別的東西,又不見得就遇到乙個剛好大小合適的;想整理一下吧,弄不好所有的東西都得倒騰一遍,真麻煩。

改進的辦法就是裝隔板,固定大小的隔板。一格不夠就兩格合併成一格用,即使東西只有1.5格大小,也佔2格。

雖然看上去有點浪費,但是好管理。如果想整理一下,可以整格整格的挪,方便。

另:參見 什麼是位元組對齊,為什麼要對齊? - C++

2樓:

個人理解了:

為了vectorization..充分利用CPU參見1. Data Alignment to Assist Vectorization

gcc.gnu.org/projects/tree-ssa/vectorization.html設定正確的編譯器的情況下可以使得速度優化一倍這種計算和並行還是有點不一樣的

引用乙個例子:

foo ()

}這樣a, b, c被對齊了之後,可以成(大意)foo ()

}所以會快一倍

關於2的冪,這裡面的256應該不是隨便取的啦,和編譯器的優化有關,所以double的只能優化一倍。有個文獻,找不到了。。。

3樓:pansz

記憶體對齊絕非僅僅是效率問題,而是記憶體不對齊在某些情況下程式根本無法正常執行。

題主多用幾種不同 CPU 進行程式設計,會遇到記憶體不對齊就直接程式崩潰的情況的。

x86 只是一種記憶體可以隨意分配無需對齊的特例 CPU 而已。

4樓:劉項

1.BYTEALIGN取決於CPU結構。x86和amd64等不同CPU上可能會有差別。

2.> 這裡應該不存在CPU讀取的問題呀

為什麼不存在呢?記憶體對齊就是為了提高CPU讀取效率。

STL中vector的動態記憶體問題

對於vs,是在棧上有一塊空間,空間裡面用了三個指向堆的指標來管理一塊堆上的記憶體,對於p,是在堆上有一塊空間,空間裡面用了三個指向堆的指標來管理一塊堆上的記憶體。比如對於vector Widget 你的一些Widget物件永遠是在堆上的,在一塊連續的記憶體中,但是管理這塊記憶體的那個物件可以在棧上,...

如何理解 struct 的記憶體對齊?

獨孤九劍 定義乙個巨集求結構體內的成員的偏移值 define offset type,member size t type 0 member 解釋 首先 type 0 定乙個type型別例項開始位址是0,type 0 member 獲取 type 0的內部成員變數member type 0 memb...

c 中new是如何動態的分配記憶體的?int p p new int 5 5不是在寫程式的時候自己填的麼?這怎麼叫動態分配?

1 在 Stack 上分配的,因為函式返回前要修正回去,所以必須是 編譯期 確定大小。棧是從高位址向低位址延伸,申請空間就是棧頂指標減操作,函式返回加回去,即被清理掉。2 在 Heap 上分配的,系統會管理您分配的內容,不受函式返回的限制,位址是從低往高延伸。假設您要分配的記憶體是 執行期 動態決策...