Все говорили, что IntPtr - это структура, так что в ней?Я могу думать только о 32-битном / 64-битном целом числе, это адрес, на который он указывает.Что-нибудь еще?
Используя Reflector, вы можете видеть, что он содержит только одно поле экземпляра типа void*
private unsafe void* m_value;
Где находится IntPtr?Если это структура, я считаю, что она должна быть в управляемом стеке CLR.Но что, если я передаю IntPtr неуправляемому методу при выполнении p / invoke, не передается ли он неуправляемому стеку?Будет ли он скопирован в неуправляемый стек?В адресном пространстве процесса есть управляемые и неуправляемые кучи, существует ли эта разделенность и для стека процесса?
Во-первых, структуры не обязательно хранятся в стеке.Это распространенное заблуждение: они могут храниться в стеке, но это не значит, что это всегда так (подробности см. в этой статье ).
Кроме того, здесь нет «стека процессов»: каждый поток имеет свой собственный стек.
Я не знаю всех подробностей о том, как работает p / invoke, но в основном да, значение IntPtr копируется в неуправляемыйmemory.
Если вам нужна дополнительная информация о взаимодействии с неуправляемым кодом, вас может заинтересовать эта статья .