Je doute que vous allez trouver un tel outil sur l'étagère, pour votre dialecte de C++.
Un tel outil doit être capable d'analyser le code C++ (dans votre cas, Microsoft C++) avec la même précision que votre compilateur, de sorte qu'il sait de l'une information précise sur les types de membres pour les types d'instance (y compris le modèle d'instanciations). Alors pour vous parler de "l'amélioration", il doit savoir ce que votre local compilateur ne fait; sans doute il est d'une certaine liberté dans la norme C++ pour accomplir mise en page.
Il y a du plaisir complications:
ce qui est optimal "mise en page" pour une classe de modèle? Cela doit dépendre fortement les arguments de modèle. Donc, vous auriez probablement obtenir des réponses différentes en fonction de la instantions.
C++ classes héritent. L'optimisation d'un enfant pourrait avoir besoin de réorganiser les membres d'un parent, deoptimizing il. Si ce qui compte pour un "espace total consommé" dépend du nombre d'instances de chaque vous avez, alors maintenant vous statistique des données d'utilisation.
Par conséquent, l'analyse pourrait être assez sophistiqué.
Je suis toujours (agréablement) surpris par les questions que les gens dans l'analyse du programme, la plupart d'entre eux (comme le vôtre) bien motivé pour certains à des fins pratiques. Le fait qu'aucun outil existe dans la plupart des cas implique la nécessité d'personnalisable de l'outillage.
Notre Logiciel DMS Réingénierie Toolkit est un programme personnalisable analyse et la transformation de l'outil (si vous avez déterminé un ordre différent était mieux, vous pouvez utiliser DMS pour réellement modifier le code). Il en a plein le C++ frontaux couvrant GCC4 ainsi que Microsoft dialectes, qui complète les tables de symboles contenant les noms et les types de programmes d'artefacts.
Ce qu'il ne sait pas, c'est précisément la taille des entités (comme intepreted par Microsoft) ou à un espace de règles d'emballage; vous auriez à déterminer ces et de prévoir que, dans le cadre de la personnalisation. Avec cette base, vous pouvez alors générer un code personnalisé pour répondre à votre question, modulo les questions abordées ci-dessus.
La personnalisation d'un outil complexe pour une langue complexe n'est pas pour les faibles de cœur, et il ne serait pas ce que l'on pourrait appeler facile. Si elle vaut la peine l'effort est motivée par le profit à partir du résultat, et c'est un jugement sur l'organisation de la partie. Mais si vous ne pouvez pas trouver une solution commerciale, et le gain est décent, DMS est une réponse réaliste.
Vous avez Clang et de la GCC en tant que solutions de rechange que vous pouvez personnaliser. Clang peut-être sorte de l'équivalent de la complexité de la personnalisation, mais il y a une tentative de faire de Clang personnalisable; GCC pas fermer. Je ne pense pas que ce soit de leur processus de MME C++ dialectes, mais je peux me tromper.