sizeof用法總結
以下執行環境都是一般的,在32位編譯環境中
1,基本資料型別的sizeof
cout《再看示例:
#pragma pack(push) // 將當前pack設定壓棧儲存
#pragma pack(2)// 必須在結構體定義之前使用
struct s1
;struct s3
;#pragma pack(pop) // 恢復先前的pack設定
計算sizeof(s1)時,min(2, sizeof(i))的值為2,所以i的偏移量為2,加上sizeof(i)
等於6,能夠被2整除,所以整個s1的大小為6。
同樣,對於sizeof(s3),s的偏移量為2,c2的偏移量為8,加上sizeof(c2)等於9,不能
被2整除,新增乙個填充位元組,所以sizeof(s3)等於10。
9,空結構體的sizeof
struct s5 ;
sizeof( s5 ); // 結果為1
10,類的sizeof
類的sizeof值等於類中成員變數所占用的記憶體位元組數。如:
class a
;int main(void)
輸出結果為12(我的機器上sizeof(float)值為4,位元組對其前面已經講過)。
不過需要注意的是,如果類中存在靜態成員變數,結果又會是什麼樣子呢?
class a
;int main()
16?不對。結果仍然是12.
因為在程式編譯期間,就已經為static變數在靜態儲存區域分配了記憶體空間,並且這塊內存在程式的整個執行期間都存在。
而每次宣告了類a的乙個物件的時候,為該物件在堆上,根據物件的大小分配記憶體。
如果類a中包含成員函式,那麼又會是怎樣的情況呢?看下面的例子
class a
};int main()
結果仍為12。
因為只有非靜態類成員變數在新生成乙個object的時候才需要自己的副本。
所以每個非靜態成員變數在生成新object需要記憶體,而function是不需要的。
出處:http://blog.csdn.net/jollyhope/archive/2007/11/20/1895357.aspx
sizeof用法總結
在vc中,sizeof有著許多的用法,而且很容易引起一些錯誤。下面根據sizeof後面的 引數對sizeof的用法做個總結。a 引數為資料型別或者為一般變數。例如sizeof int sizeof long 等等。這種情 況要注意的是不同系統系統或者不同編譯器得到的結果可能是不同的。例如int型別在...
sizeof 用法總結
sizeof 功能 計算資料空間的位元組數 1.與strlen 比較 strlen 計算字元陣列的字元數,以 0 為結束判斷。而sizeof計算資料 包括陣列 變數 型別 結構體等 所佔記憶體空間,用位元組數表示 2.指標與靜態陣列的sizeof操作 指標均可看為變數型別的一種。所有指標變數的siz...
sizeof用法總結
在vc中,sizeof有著許多的用法,而且很容易引起一些錯誤。下面根據sizeof後面的 引數對sizeof的用法做個總結。a 引數為資料型別或者為一般變數。例如sizeof int sizeof long 等等。這種情 況要注意的是不同系統系統或者不同編譯器得到的結果可能是不同的。例如int型別在...