C / C ++ огромный заголовок / источник

0

В моем проекте C я читаю данные из файла obj и файла изображения для opengl. Все данные объединены в 1 файл заголовка.

Пример (код psuedo):

vertices = {
 0 , 2, 4,
 ....
};

normals = {
 0, 0, 0, 
 ....
};

texture_pixels = {
 0, 0, 0
...
}

Дело в том, что все эти данные составляют до 15 мб заголовка. Это плохая идея иметь этот массивный заголовок? Это вызовет какие-либо проблемы в моей программе?

  • 1
    Если файл заголовка подлежит ручному редактированию (в отличие от полностью автоматически генерируемого сценарием сборки), то это гарантированно станет кошмаром обслуживания.
Теги:
header

2 ответа

1
Лучший ответ

Имеет ли большой файл заголовка и другие подходы, зависит от приложения.

Файл заголовка обрабатывается во время компиляции. Если файл редко компилируется или время его компиляции достаточно быстро, чтобы быть приемлемым, нет проблем.

Если файл заголовка часто обновляется (например, более одного раза в день) даже в развернутой конфигурации, возможно, программа может быть перехвачена для чтения эквивалентных данных из файла данных из сети, SD-карты, диска или чего-либо -вы.

У файлов данных есть свои недостатки:

  • Они представляют собой отдельный фрагмент, отличный от исполняемого файла программы, который, возможно, потребуется синхронизировать.
  • Формат файла зависит от больших или незначительных проблем, если он не закодирован в каком-либо символьном формате (например, в формате XML).
  • Как программа должна найти данные? Параметр командной строки, жестко закодированный путь и т.д.
  • Если файл не найден, что делать?
0

Обычно вы объявляете типы и функции прототипов в заголовках. и единственные функциональные тела должны быть встроенными функциями или статическими функциями.

Заголовочные файлы объединяются в источнике во время предварительной обработки. это означает, что большой файл заголовка будет объединен с любым исходным файлом, который его включает.

это не так, чтобы объявлять переменные в файлах заголовков. если вы объявляете переменную в заголовках и включаете ее из нескольких исходных файлов, вы получите "уже определенную" ссылку, точно так же, как если бы вы объявили 2 глобальных переменных с тем же именем.

если заголовочный файл включен только один раз, чем вставить в исходный файл. но в любом другом случае большие данные должны быть расположены в исходном файле, а заголовок должен содержать только объявление extern переменных.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню