Когда я перебираю строки в файле A, я анализирую строку и помещаю каждую строку (char*
) в char**
.
В конце строки я запускаю процедуру, состоящую из открытия файла B, используя fgets
, fseek
и fgetc
для извлечения символов из этого файла. Затем я закрываю файл B.
Я повторяю повторное открытие и повторное закрытие файла B для каждой строки.
Я хотел бы знать следующее:
Есть ли существенное снижение производительности при использовании malloc
и free
, так что я должен использовать что-то статическое, например myArray[NUM_STRINGS][MAX_STRING_WIDTH]
вместо динамического char** myArray
?
Существуют ли значительные потери производительности при открытии и закрытии файла B (концептуально, много тысяч раз)? Если мой файл A отсортирован, есть ли способ использовать fseek
для перемещения «назад» в файле B, для сброса того места, где я ранее находился в файле B?
РЕДАКТИРОВАТЬ Оказывается, что двойной подход значительно сократил время выполнения:
Мой файл B на самом деле является одним из двадцати четырех файлов. Вместо того, чтобы открыть один и тот же файл B1 тысячу раз, а затем B2 тысячу раз и т. Д. Я открываю файл B1 один раз, закрываю его, B2 один раз, закрываю его и т. Д. Это уменьшает многие тысячи fopen
и fclose
Операции примерно до 24.
Я использовал rewind()
для сброса указателя файла.
Это дало примерно 60-кратное улучшение скорости, что более чем достаточно. Спасибо, что указали мне на rewind()
.