資料對齊在底層開發中,是一種非常常用的手段。目的是為了在充分利用記憶體的前提下,能夠很方便的對記憶體進行管理。
在使用stl進行程式設計的時候,當我們需要申請的記憶體足夠大,空間配置器會直接為容器分配連續的足夠大的記憶體空間。當記憶體比較小時,就需要使用次級空間配置器,在配置器已經維護的記憶體中分出一小塊給客戶使用。
這是因為,大量使用小記憶體容器,會早晨記憶體碎片化。最終可能導致,空閒記憶體足夠,但連續記憶體較小,從而導致無法給需要大記憶體的容器分配記憶體。
解決方案,即,空間分配器維護乙個足夠大的空間。當容器申請記憶體小於該空間大小,則從該空間中分配記憶體。具體維護的空間,使用union結構
union obj
;
這裡就需要用到,資料對齊。把需要分配的記憶體公升級為8bit的倍數,方便記憶體管理。
constexpr size_t __align =8;
size_t round_up
(size_t bytes)
可以通過上述方式,將資料佔據的記憶體大小,上調至8的倍數。
在研究 round_up 函式是如何做到將記憶體上調至8的倍數時,想將記憶體的資料列印成二進位制**看看。
#include
void
main()
這種方式,我認為是不對的。並不能真正反映記憶體資料的儲存情況。只是將十進位制轉成二進位制。真正要看記憶體的儲存情況,還得如下操作:
void
printbinary
(const
void
* ptr, size_t size)
}for
(int i = size *8-
1; i >=
0; i--
)delete
a;}
二進位制輸出
將1 byte 數,以二進位制輸出.注意是1byte數,如果是int之類的,應注意大小端問題.include define bytetobinarypattern d d d d d d d d define bytetobinary byte byte 0x80 1 0 byte 0x40 1 0...
輸出二進位制補碼
描述 輸入乙個整型 int 的整數,輸出它的32位二進位制補碼。輸入乙個整型整數。輸出輸出一行,即該整數的補碼表示。樣例輸入 7樣例輸出 00000000000000000000000000000111 第一位為符號位,0表示正數,1表示負數 正數的原碼,反碼,補碼相同 負數的反碼為各位取反,補碼為...
c 二進位制 負數 二進位制概念
我們平時認識的數字比如1 2 3 4等數字叫做十進位制數字,我們可以看懂,但是計算機無法運算,如果計算機要計算這些數字就得將這些數字轉換成計算機能讀懂的資料,計算只能讀懂二進位制數字,二進位制的數字有什麼特徵呢?二進位制就是由1和0組成的數字,那麼為什麼計算機要使用二進位制資料呢?下面作為了解。a ...