Размеры целых чисел и указателей зависят от архитектуры, но их можно определить во время выполнения с использованием хеша %Config языка Perl. На первый взгляд может показаться, что размер структуры ifconf должен быть равен сумме размеров целого числа и указателя, но это иногда оказывается неправильным. Во многих компьютерных архитектурах используются ограничения выравнивания, которые требуют размещения указателей в адресах памяти, равных четному кратному размеров указателя. Если размеры целого числа и указателя не одинаковы (например, как в некоторых 64-разрядных системах), транслятор С разместит дополнительные байты после целого числа для выравнивания указателя по его границе. Это значит, что в конечном итоге размер структуры ifconf становится равным удвоенному размеру указателя, или 2 * $Config{ptrsize}.
Структура ifreq включает объединение С, а это значит, что одна и та же область памяти применяется в разных целях, в зависимости от контекста. Первая часть этой структуры данных содержит имя интерфейса и по длине определена равной ifnamsiz байт (в большинстве реализаций — 16 байт). Вторая часть может при различных условиях содержать следующее:
- адрес сокета, состоящий из 2-байтового обозначения семейства адресов и 4-байтового IP-адреса, которые разделены 2-байтовым дополнением.
- аппаратный адрес Ethernet, состоящий из 2-байтового обозначения семейства адресов аппаратного адреса длиной до 6 байт;
- флажки интерфейса, состоящие из 2 байт данных флажков;
- имя “ведомого” интерфейса, применяемого в различных схемах распределения нагрузки (эта тема здесь не рассматривается). Имя “ведомого” интерфейса также имеет длину ifnamsiz байт.
Размер объединения С должен быть достаточным для размещения всех этих вариантов. В данном случае он равен удвоенному значению ifnamsiz, или 2 * ifnamsiz. При такой корректной инициализации хеша Isizeof функциональные коды ioctl () после обработки будут получать правильные значения.