Это зависит от используемых типов данных.
Внутренние типы, такие как int
, double
и т. Д. (string
не соответствует) имеют одинаковое представление как в собственном, так и в управляемом коде, маршалинг не требуется. Массивы внутренних типов также размечаются (если мы игнорируем метаданные .NET-хранилища, но это отдельно от содержимого массива).
Типы значений, использующие явные атрибуты макета, где все члены являются внутренними типами, также совместимы с макетом памяти.
Пиннинг может потребоваться, если данные хранятся в объекте в управляемой куче (это верно для всех массивов).
Типы классов, с другой стороны, должны конвертироваться / переводиться туда и обратно.