struct物件在記憶體中所佔的空間大小 記憶體對齊

2021-09-05 20:03:14 字數 493 閱讀 9460

對於乙個struct物件,其在記憶體中所佔空間的大小往往不是所有成員的位元組大小相加之和。執行下面**看一下:

#include 

using

namespace std;

//union

struct demo 

;int main()

我在windowsxp,vs2008下輸出為32,為什麼不是1+2+4+4+4+8+8呢?因為struct物件在儲存時採用對齊原則,windows預設情況下是這樣的,每個成員在記憶體中的位址是其所佔空間的整數倍,如int i 所在位址末尾三位位元必為100,double d 所在位址後四個位元必為1000,所以我們可以這樣來計算:

假如位址以零開始,則c佔乙個位元組,接著是s,由於s的位址是2的倍數,則s的位址為2,c與s之間有乙個空的位元組,以此類推,可以計算出整個struct物件佔32個位元組。

當然,你可以改變對齊方式,在專案->屬性->配置屬性->c/c++->**生成->結構成員對齊中改變對齊方式。

tempdb的資料檔案越大,在記憶體中所佔快取就越多

tempdb這個系統資料庫大家都很熟悉,很多新手對tempdb都是不去操作,而使用它的預設配置。這其實並沒有錯,但是在追求效能之上的情況下,可以考慮對tempdb的配置進行修改。伺服器配置 系統 win2008 資料庫 sqlserver2008 r2 cpu 24核,記憶體 224gb,其中168...

指標變數在記憶體中佔 指標在系統記憶體中所佔的位元組數

sizeof 的特點 printf d int printf d float printf d double 其結果為 4 4 4 這就是面試的時候問你,指標在記憶體中佔多少個位元組?這就是個問題不是簡單的2,4,甚至8個位元組 回答 指標在記憶體中所在的位元組數是由系統的定址能力決定的,定址能力就...

關於結構體中各個變數在記憶體中所佔空間

首先,我們來看一下下面這段 include intmain part1 struct bpart one printf d d sizeof part1 sizeof part one return0 我們不妨假設這兩個結構體所佔記憶體位元組數為其包含的各個變數所佔位元組數的代數和,那麼,執行結果應...