Definindo uma matriz estática em um arquivo de origem C ou C ++
Eu sei que essa é uma pergunta que todo programador deve saber, mas eu não sei. Muito tempo sem programação C e eu esqueci muitas coisas.
Minha pergunta é:
Eu tenho três enormes matrizes estáticas definidas dentro de um arquivo de cabeçalho. Alguém me disse que é muito melhor declará-los comoextern
no arquivo de cabeçalho e defina-os em um único arquivo de origem C ou C ++.
Como eu posso fazer isso?
Aqui está o meu arquivo de cabeçalho:
#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
Se eu usar um arquivo de origem C ++, posso precisar definir uma classe?
ATUALIZAR:
Eu acho que o problema é:
Todo arquivo de origem no qual esses cabeçalhos estão incluídos (mesmo que indiretamente) gerará sua própria definição para essas matrizes estáticas. Não há garantia de que o compilador / vinculador os otimize em uma única definição, mesmo em arquivos de origem onde eles não são utilizados. De fato, em muitos casos, o compilador não pode otimizá-los. Isso pode resultar em dados estáticos consumindo muito espaço em disco e, possivelmente, memória em tempo de execução também.
Obrigado.