Я скучал и синхронизировал миллиард повторений трех подходов. Компилятор является gcc-O3. ЦП - то, что они вставляют 1-го генерала MacBook Pro.
Самый Быстрый следующее, в 3,7 секунды:
static unsigned char wordbits[65536] = { bitcounts of ints between 0 and 65535 };
static int popcount( unsigned int i )
{
return( wordbits[i&0xFFFF] + wordbits[i>>16] );
}
Второе место переходит к тому же коду, но ищущие 4 байта вместо 2 полуслов. Это заняло приблизительно 5,5 секунд.
Третье место переходит к битовому жонглированию 'поперечное дополнение' подход, который занял 8,6 секунд.
Четвертое место переходит к GCC's __ builtin_popcount () в позорных 11 секунды.
подсчет one-bit-at-a-time подход был waaaay медленнее, и я скучал ожидания его для завершения.
Поэтому, если Вы заботитесь о производительности прежде всего остального тогда, используют первый подход. Если Вы заботитесь, но недостаточно потратить 64 КБ RAM на нем, используйте второй подход. Иначе используйте читаемое (но медленный) one-bit-at-a-time подход.
трудно думать о ситуации, где Вы хотели бы использовать подход битового жонглирования.
Редактирование: Подобные результаты здесь .
Конфигурация для Ваших сетевых интерфейсов находится в /etc/network/interfaces
, и IPv6 полностью поддерживается. Вот пример от одной из моих систем:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address xx.yy.zz.222
netmask 28
gateway xx.yy.zz.209
iface eth0 inet6 static
address xxxx:yyyy:zzzz:1::222
netmask 64
gateway xxxx:yyyy:zzzz:1::1