C ++ большие заголовочные файлы (4,5 МБ или более) с огромными статическими массивами - PullRequest
0 голосов
/ 13 декабря 2010

У меня есть три больших заголовочных файла (4,5 МБ и более) с огромными статическими массивами внутри.

Мне нужно добавить эти заголовочные файлы в проект с собственным кодом C ++ для Android, и я не знаю, так ли этоэто правильный путь.

Я думаю, что это большие файлы и содержат большие массивы.Я не знаю, будут ли они генерировать большой lib.so и будут ли массивы занимать много оперативной памяти.

Например, один массив содержит 4032 элемента с плавающей запятой, а другой массив содержит 8056 элементов типа int.

Как вы думаете?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 13 декабря 2010

Я бы настоятельно не рекомендовал бы определять статические массивы (т. Е. Фактически указывать static int foo[8056]) в заголовочных файлах.Гораздо лучше объявить их как extern в заголовочном файле и определить их в одном исходном файле на C или C ++.

Каждый исходный файл, в который включены эти заголовки (даже косвенно), создаст свое собственное определение для этих статических массивов.Нет гарантии, что компилятор / компоновщик оптимизирует их в одно определение, даже в исходных файлах, где они не используются.Фактически, во многих случаях компилятор не может оптимизировать их.Это может привести к тому, что ваши статические данные будут занимать много места на диске и, возможно, также оперативную память.

Я не могу много сказать о других 4,4+ МБ ваших заголовочных файлов, так как я не знаючто в них.

1 голос
/ 13 декабря 2010

Ну, в заголовке много "пуха" по сравнению с скомпилированной версией.Таким образом, ваши статические массивы не будут такими большими ...

(4,032 + 8,056) * 4 = 48,352

Но я, как правило, предпочел бы построить эти данные.во время выполнения или сохранения его в каком-то файле данных.В некоторых случаях данные могут быть сгенерированы быстрее, чем считываются (например, списки простых чисел).Это зависит от данных и их использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...