Эффективность различных способов работы с файлами в языках С/С++
Авторы: Коптенок Елизавета Викторовна, Лядов Вячеслав Сергеевич, Пескова Марина Юрьевна, Капчерина Алина Алексеевна, Корж Богдан Андреевич
Рубрика: Информатика и кибернетика
Опубликовано в Техника. Технологии. Инженерия №1 (15) февраль 2020 г.
Дата публикации: 27.01.2020
Статья просмотрена: 167 раз
Библиографическое описание:
Эффективность различных способов работы с файлами в языках С/С++ / Е. В. Коптенок, В. С. Лядов, М. Ю. Пескова [и др.]. — Текст : непосредственный // Техника. Технологии. Инженерия. — 2020. — № 1 (15). — С. 5-9. — URL: https://moluch.ru/th/8/archive/152/4839/ (дата обращения: 19.12.2024).
Главный объект, с которым работает любой компьютер — информация. Как и человек, компьютер обрабатывает разного рода информацию: текст, графику, звук, видео и т. д. Одним из способов хранения и обработки информации на компьютере является использование файлов. Файл представляет собой последовательный набор данных, хранящийся на каком-либо физическом устройстве и имеющий имя и расширение. Работа с файлами реализуется средствами самой операционной системой. Операционная система предоставляет приложениям набор некоторых функций, благодаря которым организуется работа с файлами. На файловую систему накладываются определённые ограничения самой операционной системой. С точки зрения API, файл представляется как объект, по отношению к которому применяются функции API. На уровне API не важно, существует ли файл, как объект файловой системы или как устройство ввода-вывода. Расширение файла предназначено для однозначного определения типа файлового объекта.
Наиболее распространенные расширения:
– Текстовый документ: txt;
– Форматированный текстовый документ: rtx, rtf, pdf, doc, docm;
– Электронные таблицы: xls, xlsx, xlsm, ods;
– Графика: jpg, jpeg, gif, png;
– Видео: mpeg 263, avi;
– Архив: rar, zip, tg;
– Исполняемые файлы: exe, cmd, bat;
Как для пользователей, так и для разработчиков файл является одним из лучших способов хранения и обработки данных при разработке программного обеспечения. В этой статье мы рассмотрим несколько способов работы с файлами в таких языках программирования С/С++, а также проверим их эффективность.
Перед тем, как перейти к тому, какими же средствами в языках программирования C/C++ реализованы способы работы с файлами, стоит заметить, что существует два основных способа хранения в файлах, в виде:
– Текстовых файлов;
– Бинарных файлов;
Текстовый файл — является своим родом компьютерного файла, который структурирован как последовательность строк из электронного текста.
Преимущества:
– Универсальность — любая операционная система может прочитать файл, особенно если речь идет об однобайтных кодировках, которые не подвержены проблеме, характерной для других форматов файлов.
– Формат текстового файла простой, и он свободно может быть изменён обычным редактором текста, который в свою очередь есть в любом ОС.
Недостатки:
– У текстовых файлов, имеющих большой объём, низкая информационная энтропия — эти файлы занимают больше места, нежели чем минимально необходимо.
– Некоторые операции производимыми над текстовыми файлами малоэффективны. К примеру, если в файле встретится число, вычислительная система до начала операций с ним должна будет перевести его в собственный внутренний формат, применив сравнительно сложную процедуру преобразования числа; чтобы перейти на 1000-ю строку, требуется пройти 999 строк, идущих до нее.
Двоичный (бинарный) файл — в широком смысле представляет собой набор последовательных произвольных байтов.
В узком смысле слова: двоичные файлы — противопоставляются текстовым файлам. При этом, если говорить о технической реализации на уровне аппаратного обеспечения, текстовые файлы являются частным случаем двоичных файлов, и следовательно, можно сказать, что абсолютно любой файл является «двоичным»
Целью данной статьи является выяснить производительность различных способов работы с файлами. В качестве способов обработки файлов рассматривались:
– Функции заголовочного файла стандартной библиотеки языка C, для файлового ввода и вывода.
– Потоковые классы языка C++: ifstream и ofstream.
В качестве способов хранения выступали текстовые и бинарные файлы.
Для проверки эффективности каждого способа обработки были получены значения времени, за которое происходит считывание и сохранение данных в файл. В качестве данных выступал массив структур, размерностью 1000 элементов, хранящий запись вида: “Строка, целое число, вещественное число”. Эксперименты, обсуждаемые в данной статье, проходили на ноутбуке (модель Intel Core i5 CPU P8300, 2.4*4 Ghz), работающий на Windows 10. Размер оперативной памяти 8 Гб. Для каждого способа эксперимент повторялся 20 раз, и учитывался средний показатель.
Таблица 1
Значение времени, за которое произошло считывание данных из файлов. ms— миллисекунды
Текстовый файл |
Бинарный файл |
|
Стандартная библиотека языка С |
3 ms |
1 ms |
Потоковые классы: ifstream, ofstream |
8 ms |
7 ms |
Таблица 2
Значение времени, за которое произошла запись данных вфайлов. ms— миллисекунды
|
Текстовый файл |
Бинарный файл |
Стандартная библиотека языка С |
3 ms |
1 ms |
Потоковые классы: ifstream, ofstream |
13 ms |
12 ms |
Рис. 1. Время, затраченное на считывание данных из файла
Рис. 2. Время, затраченное на запись данных в файл
Вывод:
Наиболее оптимальной по времени оказалась работа стандартной библиотеки языка С. Исследование показывает, что наилучшую скорость работы обеспечивают средства стандартной библиотеки языка С, описанные в заголовочном файле stdio.h при взаимодействии с бинарными файлами. Наихудший результат показывает работа с текстовыми файлами, средствами потоковых классов, описываемые в стандартной библиотеке C++: ifstream и ofstream.
Литература:
- Страуструп, Б. Язык программирования C++ / Б. Страуструп. — М.: Радио и связь, 2011. — 350 c.
- Керниган, Б. Язык программирования C. / Б. Керниган, Д. М. Ритчи. — М.: Вильямс, 2016. — 288 c.