2010-11-23 12 views
3

J'ai essayé d'obtenir des informations sur les tableaux de pile en C# et seule façon d'attribuer ce type de tampon est d'utiliser code non sécuriséstackalloc des tableaux en C#

char* buffer = stackalloc char[16]; 

Pour contourner ce problème, je peux faire une structure de caractères.

struct Buffer16 
{ 
    public char c1,c2 //to 16 
} 

Y at-il un moyen de faire un tampon pas en créant un nouveau type. Créer à l'exécution

+2

Etes-vous sûr d'avoir besoin d'allouer vos tableaux sur la pile? –

+4

Il n'y a pas grand intérêt à essayer de transformer C# en C. Pourrait aussi bien utiliser C. Mais cela ne vous empêche pas de le faire. Vous connaissez déjà les incantations. –

+2

BTW: Un 'char' en C# représente un caractère Unicode. Le type de données qui représente un entier non signé de 8 bits est appelé 'byte'. – dtb

Répondre

3

Vous pouvez toujours jeter le pointeur sur les pointeurs de type primitif ou structures:

char* buffer = stackalloc char[16]; 
int* i = (int*) buffer; 
long* l = (long*) buffer; 
byte* b = (byte*) buffer; 
Point* p = (Point*) buffer; 

Vous avez donc toute la flexibilité. Vous pouvez également utiliser Marshal.PtrToStructure et inverser sans utiliser de code dangereux.

Est-ce que cela répond à votre question?

+0

Je connais le danger mais je ne veux pas l'utiliser. Par exemple je ne peux pas sur WP7 CF. Thx pour la pointe avec casting, ne le savais pas. –

1

Je ne crois pas qu'il existe un moyen de le faire sans passer par des cerceaux. C# est généralement conçu pour décourager la micro-gestion des ressources de la mémoire, et tend à se donner beaucoup de mal pour rendre difficile de traiter le gestionnaire de mémoire du CLR comme autre chose qu'une boîte noire. Une grande partie de la raison en est que le gestionnaire de mémoire fait généralement ce qu'il fait très bien, et le fait mieux quand vous restez hors de son chemin. Il est généralement assez bon pour que je ne sois pas surpris s'il n'y a pas de réel avantage de performance à mettre un tampon dans la pile plutôt que dans le tas, de toute façon.