Re[6]: Разумность 16 байтных IP-адресов - ведь глупость сделали
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.11.24 08:39
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

S>> Да даже поиск по IP сделать — уже лучше 8 байт — нейтивный для процессора тип.


AB>По поводу поиска я тебе уже отвечал, что в "правильно" спроектированном api или программе размерность адреса не имеет абсолютно никакого значения.


Очень даже имеет, в плане скорости работы.
То, что влезает в один регистр, передаётся через регистр.
То, что не влезает, как 16-байтное значение, уже требует подпорок разных стилей. В Unix стиле, включая, например, соглашения по вызову для x86-64 и AArch64, могут передаваться парой регистров. В других уже будут передаваться в стеке или по указателю. В памяти тут уже дороже. По указателю — ещё дороже, лишняя индирекция.

Аналогично, возьмём, например, сравнение по маске. Пусть у тебя есть три параметра: сравниваемый адрес, адрес образца и длина префикса образца (больше 0). Вариант для одного целого: вычислил маску: ~((1ul<<(64-pl))-1ul), и сравнил. Как будет выглядеть вариант для 128 бит? Если нет нативной поддержки uint128_t, будет явное ветвление в коде, дорого. Если есть uint128_t, будет неявное ветвление, с тем же результатом. Можешь посмотреть сам на компиляторный выхлоп.

Раутеры, кстати, в своей массе не умеют вообще работать с префиксами длиннее /64 для раутинга за пределами локального интерфейса — они сравнивают только старшую половинку IPv6 адреса, а в соответствующих протоколах маршрутизации такие префиксы просто выкидывают. Это именно потому, что иначе будут потери в дохрена процентов на обработке каждого пакета или раута — а оно того не стоит.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.