Я знаю, что это вопрос, который должен знать каждый программист, но я не знаю. Долгое время не программирование на С, и я забыл многое.
Мой вопрос:
У меня есть три огромных статических массива, определенных внутри файла заголовка. Кто-то сказал мне, что гораздо лучше объявить их как extern
в файле заголовка и определить их в одном исходном файле C или С++.
Как я могу это сделать?
Вот мой заголовочный файл:
#ifndef _TEMPLE_OBJECT_H_
#define _TEMPLE_OBJECT_H_
#define NUM_TEMPLE_OBJECT_VERTEX 10818
static const float TEMPLEVertices[NUM_TEMPLE_OBJECT_VERTEX * 3] = {...};
static const float TEMPLENormals[NUM_TEMPLE_OBJECT_VERTEX * 3] = {...};
static const float TEMPLETexCoords[NUM_TEMPLE_OBJECT_VERTEX * 3] = {...};
#endif
Если использовать исходный файл С++, может мне нужно определить класс?
ОБНОВЛЕНИЕ:
Я думаю, что проблема заключается в следующем:
Каждый исходный файл, в который включены эти заголовки (даже косвенно), будет генерировать собственное определение для этих статических массивов. Там нет гарантии, что компилятор/компоновщик будет оптимизировать их в одном определении, даже в исходных файлах, где они не используются. Фактически, во многих случаях компилятор не может их оптимизировать. Это может привести к тому, что ваши статические данные будут потреблять много места на диске и, возможно, также память времени выполнения.
Спасибо.