2014-01-13 2 views
1

docs для MIB_IPNETTABLE сказать:Вычислить обивка неуправляемого таблицы

Структура MIB_IPNETTABLE может содержать прокладку для выравнивания между Участник сайта dwNumEntries и первый вход MIB_IPNETROW массива в элементе таблицы . Для элементов MIB_IPNETROW-массива в элементе таблицы также может присутствовать отступы для выравнивания . Любой доступ к записи массива MIB_IPNETROW должен предполагать, что отступы могут существовать.

Будет

Marshal.SizeOf(typeof(MIB_IPNETROW)) 

Позаботьтесь о том, что? Если нет - как узнать, сколько отступов существует для его учета. Если да - будет ли он работать на x64 без проблем (см. 64 Bit P/Invoke Idiosyncrasy)?

+0

Это замечание по документации не имеет для меня никакого смысла. Я не могу видеть, откуда можно получить отступы. –

+0

@DavidHeffernan A) Спасибо. B) Согласно ссылке в последней строке вопроса - на самом деле это происходит. (По крайней мере, в соответствии с ответом.) – ispiro

+0

Этот вопрос вводит в заблуждение. Я оставил там комментарий. –

ответ

1

Выравнивание как MIB_IPNETROW, так и MIB_IPNETTABLE на x86 и x64 равно 4. Это можно сделать, посмотрев на выравнивание элементов структуры. А что касается массива, между элементами не будет отступов, потому что между элементами массива никогда не будет прокладки.

Следовательно, на этих платформах вообще не будет прокладки, и на обеих платформах одинаково макет.

Я не могу объяснить, почему в документации говорится о заполнении. Возможно, на Alpha или Itanium будет прокладка, но не на x86 и x64. Или, возможно, документация просто неверна.

+0

Спасибо. – ispiro

+0

Я понимаю, что там _is_ no padding. Однако в случаях, когда есть дополнение (если оно существует на Itanium/в других структурах) - как _can_, который будет обрабатываться - Как узнать, какие байты пропустить? – ispiro

+0

Чтобы ответить на это, нужно будет понять, почему будет существовать дополнение. Я не вижу причин, по которым прокладка будет существовать где угодно. Я думаю, что документация просто ошибается. –

Смежные вопросы