J'ai essayé de trouver une réponse à cela en utilisant de la SORTE. Il y a un certain nombre de questions qui liste les avantages et les inconvénients de la construction d'un en-tête de la seule bibliothèque en c++, mais je n'ai pas été capable d'en trouver un qui le fait en termes quantifiables.
Donc, en termes quantifiables, ce qui est différent entre l'utilisation traditionnellement séparés en-tête c++ et la mise en œuvre des fichiers de rapport à en-tête uniquement?
Pour des raisons de simplicité, je suis en supposant que les modèles ne sont pas utilisés (car ils nécessitent d'en-tête uniquement).
D'élaborer, j'ai listé ce que j'ai vu dans les articles à être les avantages et les inconvénients. Évidemment, certains ne sont pas facilement quantifiables (tels que la facilité d'utilisation), et sont donc inutiles pour quantifiables comparaison. Je vais marquer ceux que j'attends quantifiables paramètres (quantifiables).
Avantages pour l'en-tête uniquement
- Il est plus facile à comprendre, puisque vous n'avez pas besoin de spécifier les options du linker dans votre système de construction.
- Vous avez toujours compiler tous le code de la bibliothèque avec le même compilateur (options) que le reste de votre code, puisque les fonctions de la bibliothèque obtenir insérée dans votre code.
- Il peut être beaucoup plus rapide. (quantifiables)
- Peut donner compilateur/linker de meilleures possibilités pour l'optimisation (explication/quantifiables, si possible)
- Est nécessaire si vous utilisez des modèles de toute façon.
Contre pour l'en-tête uniquement
- Il gonfle le code. (quantifiables) (comment cela affecte à la fois le temps d'exécution et l'empreinte mémoire)
- Plus les temps de compilation. (quantifiables)
- La perte de la séparation de l'interface et la mise en œuvre.
- Conduit parfois difficiles à résoudre les dépendances circulaires.
- Empêche la compatibilité binaire des bibliothèques partagées/Dll.
- Il peut aggraver des problèmes de co-travailleurs qui préfèrent les méthodes traditionnelles de l'aide de C++.
Tout les exemples que vous pouvez utiliser de plus grands, projets open source (comparaison de taille similaire, code) serait très apprécié. Ou, si vous connaissez un projet qui peut basculer entre l'en-tête uniquement et séparés versions (à l'aide d'un troisième fichier qui inclut à la fois), ce serait idéal. Anecdotique chiffres sont utiles car ils me donnent un stade avec qui je peux avoir une idée.
sources pour les avantages et inconvénients:
Merci à l'avance...
Mise à JOUR:
Pour tous ceux qui peuvent le lire plus tard et est intéressé à obtenir un peu d'information de fond sur la liaison et de la compilation, j'ai trouvé ces ressources utiles:
- Le chapitre 7 de http://www.amazon.com/Computer-Systems-Programmers-Perspective-Edition/dp/0136108040
- http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
- http://www.cyberciti.biz/tips/linux-shared-library-management.html
Mise à JOUR: (en réponse aux commentaires ci-dessous)
Tout simplement parce que les réponses peuvent varier, ne veut pas dire que la mesure est inutile. Vous avez pour commencer à mesurer comme certains point. Et le plus de mesures que vous avez, le plus clair de l'image est. Ce que je demande à cette question n'est pas toute l'histoire, mais un aperçu de l'image. Bien sûr, n'importe qui peut utiliser les nombres pour incliner un argument si ils voulaient manière contraire à l'éthique de promouvoir leurs préjugés. Cependant, si quelqu'un est curieux de connaître les différences entre les deux options et publie ces résultats, je pense que l'information est utile.
N'a pas été curieux à propos de ce sujet, assez pour le mesurer?
J'aime la fusillade de projet. Nous pourrions commencer par retirer la plupart de ces variables. Utilisez uniquement une version de gcc sur une version de linux. Seulement utiliser le même matériel pour tous les indices de référence. Ne pas compiler avec plusieurs threads.
Ensuite, on peut mesurer:
- la taille de l'exécutable
- runtime
- empreinte mémoire
- moment de la compilation (pour l'ensemble du projet et en modifiant un seul fichier)
- lien temps