Да. Вот вся суть fixed
заявления, а также отмечено в описании:
Для каждого адреса, вычисленного в фиксированной указателю-инициализаторе неподвижная оператор гарантирует, что переменная ссылается адрес не подлежит перемещение или удаление сборщиком мусора на срок действия фиксированного заявления. Например, если адрес, вычисленный инициализатором фиксированного указателя , ссылается на поле объекта или элемента экземпляра массива, фиксированный оператор гарантирует, что экземпляр содержащего объекта не будет перемещен или удален в течение всего срока службы заявление.
В вашем случае фиксированных стрелочный инициализатор является bar
. Однако по причинам грамматики требуется объявление foo
. Вероятно, это причина этой идиомы, когда массив bar
должен быть нецелесообразным, но вам не нужен указатель.
Одностороннее примечание: это не оптимизация, которая может перемещать bar
вдали от ее расположения памяти за пределами такого заявления fixed
. Это сборщик мусора, уплотняющий кучу, чтобы убедиться, что он больше не фрагментирован. Однако я бы не назвал это оптимизацией.
Эх, это действительно ** C# **, не, скажем, ** C ** или ** C++ **? –
выглядит как C# для меня https://msdn.microsoft.com/en-us/library/f58wzh21.aspx – prof1990
Я не вижу никакой точки фиксированного «бара» без использования указателя 'foo' (если только точка это сделать сборщик мусора немного менее эффективным) – Slai