ПАМЯТЬ ИЛИ ПРОИЗВОДИТЕЛЬНОСТЬ. ЧЕМУ ОТДАТЬ ПРЕДПОЧТЕНИЕ? - Студенческий научный форум

IX Международная студенческая научная конференция Студенческий научный форум - 2017

ПАМЯТЬ ИЛИ ПРОИЗВОДИТЕЛЬНОСТЬ. ЧЕМУ ОТДАТЬ ПРЕДПОЧТЕНИЕ?

Новиков А.П. 1, Горовенко Л.А. 1
1Армавирский механико-технологический институт (филиал) ФГБОУ ВО "Кубанский государственный технологический университет"
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
Зачастую перед теми, кто занимается программированием в сфере игровых модификаций встает вопрос: Как стоит строить код: максимально производительно, или максимально экономично в отношении памяти.

Большинство программистов решит, что нужно искать компромисс. Но что делать в тех случаях, когда компромисс найти тяжело, либо вообще невозможно? Искать!

Допустим, нам нужно иметь в памяти 1000 ячеек содержащих двоичный ноль или единицу. 1000 целочисленных переменных (int) займет в памяти 1.95 Мб, в то время как 1000 переменных логического типа (bool) займет в памяти примерно 490 Кб. Этот метод перехода от использования одного типа данных к использованию другого приводит к экономии трёх четвертей используемой памяти. Неплохо! Но, тут же возникает вопрос, а можно ли сэкономить ещё больше?

Проведённые нами эксперименты по преобразованию компьютерного программного кода привели нас к ещё более мощному способу оптимизации памяти: хранение данных в ячейках, пользуясь ими через побитовый сдвиг.

В этом случае, на 1000 переменных мы потратим порядка 80 Кб оперативной памяти, что почти в 25 раз меньше, по сравнению с той же тысячью целочисленных переменных типа int.

Результаты проведённого сравнительного анализа представлены в таблице 1.

Таблица 1  Сравнительные анализ количества переменных различного типа на фиксированный объём оперативной памяти

Фиксированный объём памяти

1950 кб = 1.95 мб

Тип переменной

int

bool

bit's

Количество переменных

1000

4000

> 24 000

В качестве эксперимента, каждый вид переменных был записан, использован и перезаписан 10 000 раз с целью определения скорости работы программы, реализующей одну и ту же задачу посредством использования различных типов переменных. Результаты эксперимента представлены в таблице 2:

Таблица 2  Результаты эксперимента

Тип данных

int

bool

bit's

Время (усл.ед.)

~190

~170

~240

Как показал эксперимент, bit-овые переменные оказались «медленнее» остальных. Почему? Потому, что для выполнения побитовых операций генерируются дополнительные инструкции в секции кода, которые идут параллельно с нашими bit-ами. А, как известно, любая операция в той или иной степени «загружает» машину, что, естественно, сказывается на её быстродействии. Проведённый нами эксперимент показал также, что не все программные двигатели имеют многопоточность и выполняют все операции последовательно.

Приведём фрагменты программного кода, иллюстрирующие проведённое нами исследование.

Итак, создаем:

#define MAX_USERS (1000)

enum Bits:(

Просмотров работы: 201