1. В конце 70-х Стю Фелдман (Stu Feldman) написал компилятор языка FORTRAN 77, который с трудом помещался в 64 Кбайт, отводимые под код программы. Первоначально для экономии памяти он упаковал некоторые целочисленные переменные в наиболее ресурсоемких записях в четырехбитные поля. Отказавшись впоследствии от упаковки переменных, он обнаружил, что, хотя объем данных увеличился на несколько сот байт, полный объем программы уменьшился на несколько килобайт. Почему?
2. Как бы вы написали программу для построения структуры разреженной матрицы, описанной в разделе 10.2? Можете ли вы найти другие простые, но эффективные (в плане экономии памяти) структуры данных для этой задачи?
3. Каков суммарный объем всех дисков вашего компьютера? Какая его часть свободна? Сколько у вас оперативной памяти? Какая ее часть обычно доступна? Можете ли вы измерить объем различных видов кэш-памяти в вашей системе?
4. Изучите не имеющие отношения к компьютерам данные (в альманахах и тому подобном), стараясь найти примеры экономии занимаемого ими места.
5. На заре программирования Фред Брукс (Fred Brooks) столкнулся с другой проблемой представления бол ьшого массива на маленьком компьютере (помимо описанной в разделе 10.1). Вся таблица не могла храниться в массиве, поскольку на каждый из элементов приходилось несколько битов (одна десятичная цифра, если быть точным, — я же сказал, что дело было на заре программирования). Тогда он попытался использовать численный анализ, чтобы подобрать функцию, описывающую элементы таблицы. Ему действительно удалось найти такую функцию, которая позволяла почти точно получить все элементы таблицы (ни один из них не отличался от значения функции в соответствующей точке более, чем на несколько единиц), а сама функция занимала очень мало памяти, но установленные ограничения не позволяли считать точность приближения достаточной. Как удалось Бруксу достичь требуемой точности при использовании ограниченного объема памяти?
6. При обсуждении сжатия данных в разделе 10.3 мы упомянули декодирование выражения 10 * а + b с помощью операций % и /. Обсудите компромисс между занимаемым объемом памяти и быстродействием, на который в данном случае приходится идти, а также рассмотрите возможность замены этих операций на логические или на обращение к таблице.
7. В большинстве профилирующих программ (раздел 9.1) через равные промежутки времени записывается значение счетчика команд (program counter). Придумайте структуру данных для сохранения этих значений, которая была бы эффективной в плане быстродействия и занимаемой памяти, а данные в ней были бы достаточно информативны.
8. При использовании очевидного представления данных для сохранения даты требуется 8 байтов (ДДММГГГГ); номер социального страхования занимает 9 байтов (DDD-DD-DDDD), а имя человека занимает 25 байт (14 на фамилию, 10 на имя и 1 на первую букву отчества). Насколько вы сможете уменьшить эти числа, если перед вами стоит задача экономии памяти?
9. Уменьшите электронный словарь английского языка до минимального размера. При вычислении этого размера следует учитывать не только объем файла со словарем, но и объем программы-интерпретатора.
10. Звуковые файлы с необработанными данными (такие, как .wav) могут быть сжаты в формат .mp3. Необработанные графические данные (.bmp) могут быть преобразованы в .gif или .jpg. Фильмы можно переписать из .avi в .mpg. Проведите эксперименты с этими форматами файлов, чтобы определить их эффективность. Насколько эффективны эти специальные форматы сжатия по сравнению с программами сжатия общего назначения (такими, как gzip)?
11. Замечание читателя: «В современных системах важен не объем написанного, но объем используемого кода». Изучите свои программы, сравнивая их объем до и после компоновки. Как можно уменьшить этот объем?
Опубликовал vovan666
April 17 2013 00:02:17 ·
0 Комментариев ·
4042 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.