Примечание: Это продолжение до this question.Эффективное запоминание памяти и поиск категорированных строковых литералов в C++
У меня есть «устаревшая» программа, которая выполняет сотни строчных совпадений с большими кусками HTML. Например, если HTML соответствует 1 из 20 + строк, сделайте что-нибудь. Если он соответствует 1 из 4 других строк, сделайте что-нибудь еще. Есть 50-100 групп этих строк, чтобы соответствовать этим фрагментам HTML (обычно целых страниц).
Я беру удар при реорганизации этого беспорядка кода и стараюсь придумать хороший подход ко всем этим матчам.
Требования к исполнению этого кода являются довольно строгими. При выполнении этих совпадений не нужно ждать ввода-вывода, поэтому они должны быть в памяти. Также может быть более 100 копий этого процесса, запущенного в то же время, поэтому большой ввод-вывод при запуске может вызвать медленный ввод-вывод для других копий.
Учитывая эти требования, это было бы наиболее эффективно, если в ОЗУ хранится только одна копия этих строк (см. Мой предыдущий вопрос, связанный выше).
Эта программа в настоящее время работает в Windows с компилятором Microsoft, но я хотел бы, чтобы решение было как можно более кросс-платформенным, поэтому я не думаю, что хочу использовать файлы ресурсов PE или что-то в этом роде.
Mmapping внешний файл может работать, но тогда у меня есть проблема сохранения версии программы и версии данных в синхронизации, но обычно это не меняется без другой. Также для этого требуется некоторый файл «формат», который добавляет слой сложности, которого я бы скорее не хотел.
Итак, после всего этого пре-амблема кажется, что лучшим решением является наличие пучков массивов строк, которые затем можно перебрать. Это кажется грязным, поскольку я очень сильно смешиваю код и данные, но с вышеуказанными требованиями есть ли лучший способ справиться с такой ситуацией?
Я не уверен на 100%, что я понимаю, что на самом деле означает ваш второй абзац (часть о том, что делает ваша программа на самом деле). Если бы вы могли пояснить, что, возможно, мы придумаем несколько полезных идей. – nategoose
эффективное хранение или извлечение? Название говорит о хранении, но текст звучит скорее как поиск. –
Надеюсь, мое редактирование в первом большом абзаце проясняет ситуацию. – thelsdj