Структура памяти STL зависит от конкретной реализации. Например. sizeof (std :: vector) - 16 в выпуске и 20 в режиме отладки, когда вы используете реализацию, поставляемую с Visual C ++. И у вас есть указатели в классах STL, которые не могут быть значимым образом перенесены в управляемую память. Вы можете переключиться на независимые от платформы типы C или COM в интерфейсе (например, передать массив с параметром count или безопасным массивом), если хотите выполнить маршалинг, поскольку .Net лучше понимает эти типы. Я рекомендую COM, потому что он имеет более богатые типы и поддерживает другие языки, если вам это нужно.
В качестве альтернативы, если вам нужна скорость, вы можете написать шаблонную функцию marshal_as для выполнения преобразования, чтобы вы могли повторно использовать код маршалинга или даже буфер маршалинга, или написать управляемую оболочку для ваших объектов C ++ .
Если данные, которые маршалируются, слишком велики для размещения в памяти, вы также можете сериализовать данные во временный файл или базу данных и прочитать их обратно из управляемого кода в виде кусков.