Compartilhar via


stackalloc (translation from VPE for Csharp Reference)

The stackalloc palavra-chave é usada em um contexto de código não seguro para alocar um bloco de memória na pilha.

int* fib = stackalloc int[100];

Comentários

O exemplo a seguir gera a sequência fibonacci números 100, no qual cada número é a soma dos dois números anteriores.No código, um bloco de memória de dimensionar suficiente para conter 100 elementos do tipo int é alocado na pilha, não a pilha. O endereço do bloco é armazenado no ponteiro fib. Essa memória não está sujeitas a coleta de lixo e, portanto, não precisa ser fixado (usando fixo).O tempo de vida do bloco de memória está limitado ao tempo de vida do método que a define.Não é possível liberar a memória antes do método retorna.

stackalloc só é válido em inicializadores de variáveis locais.

Como tipos ponteiro estão envolvidos, stackalloc requer não seguro contexto.Para obter mais informações, consulte Não seguro código e ponteiros (guia de programação C#).

stackalloc é como _alloca na biblioteca de time de execução C.

Segurança

Código não seguro é menos seguro que as alternativas de seguras.No entanto, o uso de stackalloc Habilita recursos de detecção de saturação de buffer no automaticamente o Common linguagem tempo de execução (CLR). Se for detectada uma saturação de buffer, o processo é encerrado sistema autônomo rapidamente sistema autônomo possível para minimizar a chance de que o código mal-intencionado é executado.

Exemplo

class Test
{
    static unsafe void Main()
    {
        const int arraySize = 20;
        int* fib = stackalloc int[arraySize];
        int* p = fib;
        *p++ = 1;
        for (int i = 2; i < arraySize; ++i, ++p)
        {
            // Sum the previous two numbers.
            *p = p[-1] + p[-2];
        }
        for (int i = 0; i < arraySize - 1; ++i)
        {
            Console.WriteLine(fib[i]);
        }

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
/*
Output
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
*/

Especificação da linguagem C#

Para obter mais informações, consulte a seção a seguir no Especificação da linguagem C#:

  • 18,8 Alocação de pilha

Consulte também

Conceitos

Guia de Programação C#

Referência

Palavras-chave C#

Operador de palavras-chave (translation from VPE for Csharp Reference)

Não seguro código e ponteiros (guia de programação C#)

Outros recursos

Referência C#