C 中sizeof的用法

2022-01-19 01:02:21 字數 1220 閱讀 2587

在c#中,sizeof用來計算型別的大小,單位是位元組。有這樣的乙個類:

public

class myuglyclass

在客戶端,試圖使用sizeof計算該型別的大小。

class program
}
執行,報錯:

○ 第乙個報錯說明要使用sizeof,必須使用關鍵字unsafe

○ 第二個報錯說明sizeof對執行時變數無效,只能針對編譯器變數統計其大小

把類改成struct值型別。

public

struct myuglyclass

客戶端改成如下:

class program
}
}
執行,繼續報錯:"不安全**只會在使用 /unsafe 編譯的情況下出現"。

解決方法是:右鍵專案→屬性→生成→勾選"允許不安全**"→儲存

再次執行,結果:12

問題又來了,在myuglyclass這個值型別結構中,char型別16位,相當於2個位元組,int型別32位,相當於4個位元組。myuglyclass型別大小=2+2+4=8個位元組,應該是8個位元組才對!怎麼會是12個位元組呢?

這就涉及到棧的對齊和填充了。就拿上面的例子來說:原本,棧上有int型別的變數佔4個位元組,2個char型別的變數分別佔2個位元組,當棧上的這些變數排列之後,棧還要進行對齊排列,即所有較小位元組的變數向最大位元組的變數看齊,並且填充空位。

紅叉部分是為了對齊而填充補上的。

如果想忽略為了對齊而填充補上的部分,可以使用[structlayout]特性。

[structlayout(layoutkind.auto)]
public

struct myuglyclass

再次執行,結果:8

總結:sizeof只適用於值型別,並且需要在unsafe上下文環境中使用。

c 中sizeof的用法

1 作用 sizeof計算資料 包括陣列 變數 型別 結構體等 所佔記憶體空間,用位元組數表示。2 sizeof有三種用法形式,sizeof操作符,對變數或物件可以不加括號,但若是型別,須加括號 如下 1 sizeof object 物件 2 sizeof type name 型別 3 sizeof...

C中sizeof的用法

之前學習c語言,對於其中的很多細節問題都沒有了解的很清楚,都囫圇吞棗的過去了,每次看到各個公司出的筆試面試題的時候,才發現自己的c語言基礎中漏洞百出,今天就其中的乙個漏洞 sizeof好好的彌補一下,如有不當,敬請指出。sizeof,計算資料空間的大小,它不是函式,而是一種單目運算子。sizeof,...

C中sizeof的用法

sizeof用法總結 1 在c語言中,sizeof 是乙個判斷資料型別或者表示式長度的運算子,對 sizeof 的處理都是在編譯階段進行。2 基本資料型別的sizeof 這裡的基本資料型別指short int long float double這樣的簡單內建資料型別,由於它們都是和系統相關的,所以在...