stackalloc массивов в C # - PullRequest
       1

stackalloc массивов в C #

3 голосов
/ 24 ноября 2010

Я пытался получить некоторую информацию о массивах стека в C #, и единственный способ выделить этот тип буфера - использовать небезопасный код

char* buffer = stackalloc char[16];

В качестве обходного пути я могусделать структуру символов.

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

Есть ли способ сделать буфер не , создав новый тип.Создать во время выполнения.

Ответы [ 2 ]

3 голосов
/ 24 ноября 2010

Вы всегда можете привести указатель к указателю или структуре примитивного типа:

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

Так что у вас есть все возможности. Вы также можете использовать Marshal.PtrToStructure и наоборот без использования небезопасного кода.

Это отвечает на ваш вопрос?

1 голос
/ 24 ноября 2010

Я не верю, что есть способ сделать это без прыжков через обручи.

C #, как правило, предназначен для предотвращения микроуправления ресурсами памяти и, как правило, делает все возможное, чтобы затруднить обращение с диспетчером памяти CLR как с чем-то иным, как с черным ящиком. Большая часть причины этого заключается в том, что диспетчер памяти обычно делает то, что он делает очень хорошо, и делает это лучше всего, когда вы находитесь в стороне от него. Как правило, достаточно хорошо, что я не удивлюсь, если в любом случае не удастся получить реальный выигрыш в производительности, если поместить буфер в стек вместо кучи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...