Можно ли иметь огромный список инициализации для gcc?
Да.Это не нормально иметь такой большой размер, что система, на которой вы строите, исчерпывает ресурсы.Нет никаких ограничений, присущих архитектуре gcc.
Но это статические данные, и QHash
- не тот инструмент для работы.Вместо этого вы должны использовать что-то вроде gperf с предоставленной пользователем структурой.
Входной файл для gperf в вашем случае будет выглядеть следующим образом:
%language=C++
%struct-type
%define class-name WordHash
%define slot-name text
struct Word { const char *text; double frequency; };
%%
the, 0.0023450551861261
of, 0.00258603321106053
to, 0.00375511856396871
and, 0.0040408455383457
Использованиесгенерированный gperf код, вы должны выглядеть следующим образом:
double getFrequency(const char *text) {
auto *word = WordHash::in_word_set(text, strlen(text));
Q_ASSERT(!word || strcmp(word->text, text) == 0);
return word ? word->frequency : -1;
}