В моем проекте C я читаю данные из файла obj и файла изображения для opengl. Все данные объединены в 1 файл заголовка.
Пример (код psuedo):
vertices = {
0 , 2, 4,
....
};
normals = {
0, 0, 0,
....
};
texture_pixels = {
0, 0, 0
...
}
Дело в том, что все эти данные составляют до 15 мб заголовка. Это плохая идея иметь этот массивный заголовок? Это вызовет какие-либо проблемы в моей программе?
Имеет ли большой файл заголовка и другие подходы, зависит от приложения.
Файл заголовка обрабатывается во время компиляции. Если файл редко компилируется или время его компиляции достаточно быстро, чтобы быть приемлемым, нет проблем.
Если файл заголовка часто обновляется (например, более одного раза в день) даже в развернутой конфигурации, возможно, программа может быть перехвачена для чтения эквивалентных данных из файла данных из сети, SD-карты, диска или чего-либо -вы.
У файлов данных есть свои недостатки:
Обычно вы объявляете типы и функции прототипов в заголовках. и единственные функциональные тела должны быть встроенными функциями или статическими функциями.
Заголовочные файлы объединяются в источнике во время предварительной обработки. это означает, что большой файл заголовка будет объединен с любым исходным файлом, который его включает.
это не так, чтобы объявлять переменные в файлах заголовков. если вы объявляете переменную в заголовках и включаете ее из нескольких исходных файлов, вы получите "уже определенную" ссылку, точно так же, как если бы вы объявили 2 глобальных переменных с тем же именем.
если заголовочный файл включен только один раз, чем вставить в исходный файл. но в любом другом случае большие данные должны быть расположены в исходном файле, а заголовок должен содержать только объявление extern
переменных.
Время компиляции исходного файла зависит от размера после предварительной обработки. поэтому, если вы уменьшите размер файла, экспортируя детали в заголовки, вы не улучшите время компиляции. если вы разделите его на несколько исходных файлов, любая часть будет скомпилирована отдельно, это немного замедлит компиляцию, но когда вы измените одну часть, другие части не понадобятся для перекомпиляции, поэтому иногда это лучше.