Share via


Mémoires tampons de taille fixe (Guide de programmation C#)

Mise à jour : novembre 2007

En C#, vous pouvez utiliser l'instruction fixed pour créer un tampon avec un tableau de taille fixe dans une structure de données. Cette action est utile lorsque vous utilisez un code existant, comme le code écrit dans d'autres langages, les DLL préexistantes ou les projets COM. Le tableau fixe peut accepter tous les attributs ou modificateurs qui sont prévus pour les membres de structures régulières. La seule restriction est que le type de tableau doit être bool, byte, char, short, int, long, sbyte, ushort, uint, ulong, float ou double.

private fixed char name[30];

Notes

Dans les versions précédentes de C#, il était difficile de déclarer une structure de taille fixe de style C++ parce qu'un struct C# qui contient un tableau ne contient pas les éléments du tableau, mais plutôt une référence aux éléments.

C# 2.0 permet également d'incorporer un tableau de taille fixe dans un struct en cas d'utilisation dans un bloc de code unsafe.

Par exemple, avant C# 2.0, le struct suivant avait une taille de 8 octets, où le tableau pathName est une référence au tableau alloué par tas :

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

En C# 2.0, un struct peut être déclaré avec un tableau incorporé :

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

Dans cette structure, le tableau pathName est de taille et d'emplacement fixes et peut être par conséquent utilisé avec un autre code unsafe.

La taille du tableau char de 128 éléments est de 256 octets. Les mémoires tampons char de taille fixe occupent toujours deux octets par caractère, quel que soit le codage. Cela est vrai même lorsque les mémoires tampons de caractères sont marshalées en fonction de méthodes API ou de structs avec CharSet = CharSet.Auto ou CharSet = CharSet.Ansi. Pour plus d'informations, consultez CharSet.

Un autre tableau de taille fixe courant est le tableau bool. Les éléments d'un tableau bool ont toujours une taille d'un octet. Les tableaux bool ne conviennent pas pour la création de tableaux d'octets ou de mémoires tampons.

Remarque :

À l'exception de la mémoire créée à l'aide de stackalloc, le compilateur C# et le common language runtime (CLR) n'effectuent pas de contrôles du dépassement de mémoire tampon de la sécurité. Comme avec le code unsafe, soyez prudent.

Les mémoires tampons unsafe sont différentes des tableaux normaux :

  • Vous pouvez utiliser des mémoires tampons unsafe dans un contexte unsafe uniquement.

  • Les mémoires tampons unsafe sont toujours des vecteurs, ou tableaux unidimensionnels.

  • La déclaration du tableau doit inclure un compte, tel que char id[8]. Vous ne pouvez pas utiliser char id[] à la place.

  • Les mémoires tampons unsafe peuvent uniquement être des champs d'instance de structs dans un contexte unsafe.

Voir aussi

Concepts

Guide de programmation C#

Référence

Pointeurs et code unsafe (Guide de programmation C#)

fixed, instruction (Référence C#)

Interopérabilité (Guide de programmation C#)