Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Да, все понятно, но что конкретно... 08.06.09 13:00 Число просмотров: 2629
Автор: PS <PS> Статус: Elderman
|
Решение задачи то найдено, но вопрос все равно остался - почему byte[] в стеке передается нормально, как указатель на область данных, а тот же byte[] в структуре - уже имеет совсем другое значение ?
Идея о GC мне кажется не совсем верной. Если бы она была верной, то сценарий был бы таким:
1. записали в стек один указатель
2. gc поменял адрес
3. записали в стек другой указатель
4. вызвали функцию
Таким образом вызывая функцию два раза подряд мы бы получили 4ре разных указателя.
Однако, по моим тестам видно, что указатель передающийся в структуре всегда один и тот же, и всегда отличный от указателя передающегося в параметре функции. Например, по первому вызову 12c9ac0, 15776c0, а при втором 12c9ac0, 15776f4.
Т.ч. gc, конечно меняет местоположение массива, но описанная проблема в чем то другом.
Такое впечатление что
F( byte[] ptr ) и struct S { byte[] ptr } - имеют различное внутреннее представление ptr, который указывает на одну и ту же область памяти. Видимо .net различает что есть что и "приводит" разные цифры в ptr к "одному знаменателю".
Это лишь предположение. Литературу по .net типа "windows" Рихтера мне найти еще не удалось.
|
|
|