Сейчас изучаю динамические массивы. Дал себе задание: считать из файла данные в динамический массив структур . Как лучше выделять память? Есть 2 варианта:
Посчитать количество строк в файле и дать место под массив malloc'ом. Минусы этого метода, что по файлу надо пробигаться 2 раза: первый это подсчёт количества строк, второй заполнение массива.
При считывании из файла расширять выделяемую память realloc'ом. Минусы этого метода, что realloc - ресурсозатратное средство. Но можно немного обойти этот минус и выделять раз в 3 итерации сразу память для трёх элементов.
Итак, что же использовать лучше? Или возможно всё зависит от размера файла?
UPD:
1. OC - Windows
2. Формат данных в фалйе: Название(char)|количество(int)
И структура из двух элементов name(char[255]) и count(int). Кол-во данных не фиксированное, может быть как 100 элементов так и 1000. Или всё-таки ввести максимум и выделять максимум памяти вначале, а потом сокращать? Или узнать сколько весит 1 эелемент этой структуры, проверить размер файла, разделить его на вес 1го элемента и так мы получим кол-во элементов, для которых надо выделять память?
Ответ
а с чего вы взяли что "количество строк" == "размер файла" ? яркий пример 2 файла в одном 2 строки в каждой 10 символов и втором 2 строки и в каждой 1000 символов... у любого файла есть мета информация о размере, времени создания, времени чтения, etc... узнаём размер файла узнаём размер памяти узнаём сколько свободно памяти используем полученную инфу...
Комментариев нет:
Отправить комментарий