Насколько я знаю, да, пока вы находитесь в блоке fixed
, GC не будет перемещать arg
. После выхода из блока fixed
переменная открепляется и, следовательно, подлежит перемещению GC .
О static
struct / class / field , сохраняющих свой адрес в памяти фиксированным, ответ - нет. Они подлежат перемещению, как и любой другой объект. сама по себе не гарантирует, что в будущем не будет никакого перемещения в памяти только потому, что оно помечено как static
.
Значение static
связано со знаниями и определенностью, которые имеет компилятор во время компиляции определенного класса / структуры / поля , что у вас есть. Это не имеет никакого отношения к ячейкам памяти и их исправлению или нет и т. Д. По словам Эрика Липперта:
Статические методы называются «статическими», потому что всегда можно точно определить, во время компиляции, какой метод будет вызван. То есть метод может быть решен исключительно путем статического анализа кода.