среда, июля 19, 2006

Восстановление данных с жесткого диска путем заморозки

Оригинальный способ восстановления данных с жесткого диска: Freeze your hard drive to recover data: Myth or reality? Надо положить убитый жесткий диск в холодильник, лучше на сутки. Потом он может проработать минут 20, а может и полчаса. Скорее всего это хватит, чтобы скопировать с него особенно важные данные. Автор поста провел эксперимент с нерабочим жестким диском, диск ожил. Рассказ сопровождается красочными иллюстрациями.

Несмотря на то, что способ звучит анекдотично, почему бы и не попробовать? Хуже уже все равно не будет. В комментариях к вышеупомянутому посту народ рассказывает чудесные способы спасения данных этим способом.

Перед засовыванием диска в холодильник желательно его положить во что-нибудь. А то у одного из комментаторов он покрылся льдом, но когда слегка обтек, все равно заработал.

В комментариях идею активно развили, в том числе предложили несколько способов подключения жесткого диска, не вынимая его из холодильника.

понедельник, июля 10, 2006

Оценка производительности контейнеров

Standard Container Benchmark - программка, сравнивающая прозиводительность различных контейнеров. Задача, которая выбрана для оценки производительности: удаление дубликатов из последовательности чисел типа double. Примечательно в этой программке то, что ее написали Степанов со Страуструпом специально для программистов. Чтобы было удобнее выбирать контейнер для своей задачи, чтобы можно было сравнить различные реализации контейнеров, поэкспериментировать с настройками оптимизации в компиляторе. В результате получается что-то вроде такого:


size array vector with pointers vector with iterators deque list set multiset
10 1.91 2.48 4.66 8.20 22.50 6.95 11.05
100 1.39 1.34 3.09 4.67 8.52 5.03 7.22
1000 1.25 1.25 2.97 3.98 7.52 4.56 7.05
10000 1.41 1.31 2.75 3.77 8.28 4.81 7.61
100000 1.17 1.19 2.52 3.25 11.08 7.53 14.48
1000000 1.48 1.56 3.23 4.27 12.34 9.86 11.08


Ссылки по теме:
comp.lang.c++.moderated Container Performance. Пост Страуструпа с этой программой, который вылился в обсуждение производительности контейнеров на разных платформах.
openwatcom.contributors OWSTL benchmark experiment. Сравнительно недавнее обсуждение прозводительности контейнеров в OWSTL.

воскресенье, июля 02, 2006

Подсчет количества установленных битов в беззнаковом целом

Это одна из известных задачек, которую задают на собеседованиях: дано беззнаковое целое число, надо подсчитать количество бит, установленных в единицу. Как это сделать как можно быстрее?
Самый простой вариант - тупо пройтись по числу и проверить каждый бит. О скорости тут речь не идет. Несколько быстрее будет проверять последний бит, затем использовать операцию сдвига и после каждого сдвига проверять исходное число на 0.
Дела пойдут гораздо быстрее, если предподсчитать количество единиц. Это можно сделать для 8-битовых и 16-битовых целых, дальше уже сложнее...
На страничке Counting Number of On Bits in an Integer есть эти и другие, более мудрёные варианты решения этой задачи, все с примерами кода и с сравнением по скорости. Предподсчет быстрее всех.