Когда в стеке выделяется массив фиксированного размера? - PullRequest
1 голос
/ 19 мая 2011

У меня есть следующий метод для копирования байтов из потока сокетов на диск:

 public static void CopyStream(Stream input, Stream output)
 {
    // Insert null checking here for production
    byte[] buffer = new byte[8192];
    int bytesRead;
    while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, bytesRead);
    }
}

Что меня интересует: будет ли buffer выделяться в стеке или в куче?Конечно, я мог бы сделать этот метод небезопасным и добавить ключевое слово fixed в объявление переменной, но я не хочу этого делать, если мне не нужно.

1 Ответ

4 голосов
/ 19 мая 2011

Переменная buffer будет размещена в стеке, 8192-байтовая память, в которой переменная buffer содержит расположение, будет в куче.

почему ты говоришь о fixed? Вы пытаетесь ускорить процесс? Это почти наверняка не будет ...

Цитата Эрика Липперта:

"Но в подавляющем большинстве программ там, локальные переменные распределения и освобождения не будут узкое место производительности. «

Ref .

...