sizeof的相關知識總結

2021-09-25 11:49:05 字數 1220 閱讀 2843

sizeof常見情況

#include#include#includeusing namespace std;

stucta;

stuctb;

int main();

ss1是乙個字元指標,指標的大小是乙個定值,就是4位元組,所以答案為4;

ss2是乙個字元陣列,但是未定義大小,所以預設陣列有\0,所以是11位元組;

ss3也是乙個字元陣列,但是規定了大小,所以就是100位元組;

ss4是乙個整型陣列,這個陣列規定了大小,整型變數佔4位元組,所佔空間是4*100位元組,400位元組;

q1和ss2類似,所以4位元組;

q2有"\n",算一位(\0),所以是3位元組;

q3是整形指標,指標的大小是個定值,所以是4位元組;

a b是兩個結構體。

a是三個short整型,各自2位元組對齊,sizeof(a)為6.

b中a1雖然為short型別2要與下方的long型別對齊所以為四位元組,a2為四位元組,a3和a1一樣需要和記憶體對齊,所以最後為12位元組。

str1和str2都是指標,所以都是4位元組。

資料對齊

資料對齊是指資料所在的記憶體位址必須是該資料長度的整數倍。dword資料的記憶體位址能被4除盡,word資料的記憶體起始位址能被2除盡。dword:2個位元組就是1個word(1個字,16位),dword(double word)就是雙字的意思,兩個字(32位)。x86cpu能直接訪問乙個對齊的資料,當他訪問乙個未對齊的資料時,會在內部進行一部分的調整。

這些調整對於程式來說是透明的,但是會降低執行速度,所以編譯器在編譯程式時會盡量保證資料對齊。

靜態變數對sizeof的影響

我們先來看這樣乙個例子

#includeusing namespace std;

class a

int main()

;class a2

;class b :public a

;class c :public virtual b

;class d :publica ,public a2;

int main(int argc,char *ar** )

{ cout<<"sizeof(a):"以上答案是1,1,4,1,。這說明空類所佔的空間為1.單一繼承的空類空間也為1,多重繼承的空類空間也為1.但是虛繼承涉及虛表(虛指標),所以sizeof(c)的大小為4.

總結 關於Sizeof的相關知識

sizeof的使用場合 sizeof操作符的乙個主要用途是與儲存分配和i o系統那樣的例程進行通訊 用它可以看看某種型別的物件在記憶體中所佔的單元位元組 在動態分配一物件時,可以讓系統知道要分配多少記憶體 便於一些型別的擴充。由於運算元的位元組數在實現時可能出現變化,建議在涉及運算元位元組大小時用s...

cros 相關的知識總結

一般來說可以有兩種資料鏈的形式,一種是rtk插卡進行上網,設定連線cros。進行接收差分資料進行定位輸出。第二種是,使用手機網路 可以使用手機的tcp連線 ntrip協議進行拿資料然後通過藍芽 給rtk。再進行解算輸出 詳情請見 android 使用ntrip協議,socket連線獲取接入點,登入模...

引用相關知識總結

1.什麼是 引用 申明和使用 引用 要注意哪些問題?答 引用就是某個目標變數的 別名 alias 對應用的操作與對變數直接操作效果完全相同。申明乙個引用的時候,切記要對其進行初始化。引用宣告完畢後,相當於目標變數名有兩個名稱,即該目標原名稱和引用名,不能再把該引用名作為其他變數名的別名。宣告乙個引用...