Vyrovnávací paměti pevné velikosti (Příručka programování C#)
V jazyce C#, můžete použít pevnou příkaz vytvořit vyrovnávací paměti pevné velikosti pole datové struktury.To je užitečné, když pracujete s existující kód, například kód napsaný v jiných jazycích, již existující knihovny DLL nebo COM projektů.Pole pevné může trvat všechny atributy modifikátorů, které jsou povoleny pro členy pravidelně struct.The only restriction is that the array type must be bool, byte, char, short, int, long, sbyte, ushort, uint, ulong, float, or double.
private fixed char name[30];
Poznámky
V dřívějších verzích jazyka C# deklarování pevnou velikost struktury stylu C++ byla obtížné, protože struktura C#, který obsahuje pole neobsahuje prvky pole.Místo toho struktura obsahuje odkaz na prvky.
C# 2.0 přidána možnost Vložit pole o pevné velikosti v struct při použití v nebezpečných bloku kódu.
Například před C# 2.0, následující struct by velikost 8 bajtů.pathName Pole je odkaz na pole přidělené haldy:
public struct MyArray
{
public char[] pathName;
private int reserved;
}
Začínající na C# 2.0, struct mohou obsahovat vložená pole.V následujícím příkladu fixedBuffer pole má pevnou velikost.Chcete-li prvky pole, použijte fixed příkaz vytvořit ukazatel na první prvek.fixed Prohlášení PinY instanci fixedBuffer na určité místo v paměti.
namespace FixedSizeBuffers
{
internal unsafe struct MyBuffer
{
public fixed char fixedBuffer[128];
}
internal unsafe class MyClass
{
public MyBuffer myBuffer = default(MyBuffer);
}
internal class Program
{
static void Main()
{
MyClass myC = new MyClass();
unsafe
{
// Pin the buffer to a fixed location in memory.
fixed (char* charPtr = myC.myBuffer.fixedBuffer)
{
*charPtr = 'A';
}
}
}
}
}
Velikost 128 prvek char pole je 256 bajtů.Pevnou velikost char vyrovnávací paměti vždy trvat dva bajty na znak, bez ohledu na kódování.To platí i při zařadit vyrovnávacích pamětí char metody rozhraní API nebo struktur s CharSet = CharSet.Auto nebo CharSet = CharSet.Ansi.Další informace naleznete v tématu CharSet.
Jiné běžné pevné velikosti pole je bool pole.Prvky v bool pole jsou vždy velikosti jednoho bajtu.boolmatice nejsou vhodné pro vytváření bit pole nebo vyrovnávací paměti.
[!POZNÁMKA]
S výjimkou pro paměti vytvořen pomocí stackalloc, kompilátor jazyka C# a společného jazykového modulu runtime (CLR) neprovádějí žádné bezpečnostní kontroly přetečení vyrovnávací paměti.Stejně jako všechny nebezpečný kód, buďte opatrní.
Nebezpečné vyrovnávacích pamětí regulární matice liší následujícími způsoby:
Nebezpečné vyrovnávacích pamětí lze použít pouze v kontextu unsafe.
Nebezpečné vyrovnávací paměti jsou vždy vektorů nebo jednorozměrné pole.
Prohlášení pole by mělo zahrnovat například count, char id[8].Nelze použít char id[] místo.
Nebezpečné vyrovnávacích pamětí lze pouze pole instancí struktur v kontextu unsafe.
Viz také
Referenční dokumentace
Nebezpečný kód a ukazatele (Příručka programování C#)
Interoperability (Příručka programování C#)