fixed запрещает перемещать объект в памяти.
Сборщик мусора может и не соберёт объект, но без fixed он может его переместить и тогда указатель станет невалидным.
stackalloc выделяет данные на стеке, а по тому с ним такой проблемы нет, ну и да - он не нагружает gc, хоть и обладает кое-какими другими потенциальными проблемами.