C#編程之固定大小的緩衝區

來源:互聯網
上載者:User

在 C# 中,可以使用 fixed 語句在資料結構中建立帶有固定大小數組的緩衝區。使用現有代碼(如使用其他語言、預先存在的 DLL 或 COM 項目編寫的代碼)時,這種方法非常有用。固定數組可採用允許普通結構成員使用的任何屬性或修飾符。唯一的限制是,數群組類型必須是 bool、byte、 char、 short、int、long、sbyte、ushort、uint、ulong、float 或 double。

private fixed char name[30];

在早期版本的 C# 中,聲明 C++ 樣式的固定大小結構是很困難的,因為包含數組的 C# 結構不包含數組元素,而是包含對元素的引用。

C# 2.0 添加了在 struct(當用在 unsafe 代碼塊中時)中嵌入固定大小的數組的功能。

例如,在 C# 2.0 之前,下面的 struct 的大小為 8 位元組,其中 pathName 數組是對堆分配的數組的引用:

public struct MyArray
{
    public char[] pathName;
    private int reserved;
}

在 C# 2.0 中,struct 可使用嵌入數組進行聲明:

public struct MyArray // This code must appear in an unsafe block
{
    public fixed char pathName[128];
}

在此結構中,pathName 數組具有固定的大小和位置,因此可用在其他不安全的代碼中。

128 個元素的 char 數組的大小為 256 位元組。在固定大小的 char 緩衝區中,每個字元始終佔用兩個位元組,而與編碼無關。即使將 char 緩衝區封送到具有 CharSet = CharSet.Auto 或 CharSet = CharSet.Ansi 的 API 方法或結構,也是如此。有關更多資訊,請參見 CharSet。

另一種常見的固定大小的數組是 bool 數組。bool 數組中的元素的大小始終為一個位元組。bool 數組不適合用於建立位元組或位緩衝區。

除了用 stackalloc 建立的記憶體之外,C# 編譯器和公用語言運行庫 (CLR) 不執行任何安全緩衝區溢位檢查。與所有不安全的程式碼一樣,請謹慎使用。

不安全緩衝區與常規數組在以下方面不同:

  • 不安全緩衝區只能用在不安全上下文中。

  • 不安全緩衝區始終是向量(或一維數組)。

  • 數組的聲明應包括計數,如 char id[8]。而不能使用 char id[]。

  • 不安全緩衝區只能是不安全上下文中的結構的執行個體欄位。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.