compilateur g++ drapeau pour minimiser la taille du binaire
Je suis un Arduino Uno R3. Je suis en train de faire des objets logiques pour chacun de mes capteurs à l'aide de C++. L'Arduino est très limitée sur la carte mémoire de 32 ko*, et, en moyenne, mes objets compilés sont à venir autour de 6KB*.
Je suis déjà en utilisant le plus possible des types de données nécessaires, dans une tentative de réduire mon empreinte mémoire. Est-il un compilateur drapeau afin de réduire la taille du binaire, ou dois-je utiliser plus courte de la variable et la fonction des noms, des fonctions, etc. afin de minimiser mon code de base?
Aussi, toutes les autres astuces ou conseils pour réduire la taille du binaire serait appréciée.
*Il ne peut pas être mesurée en KO (que je n'ai pas l'avoir en face de moi), mais 1 objet est d'environ 1/5 de ma totale de la taille de la mémoire, ce qui suscite mon inquiétude.
Non... -O3 fera binaires plus en général.
La gcc avec l'option optimiser pour la taille est
-Os
. Vous pouvez également strip
les symboles pour vos binaires après la liaison.c'est
-Os
La vitesse d'exécution et la taille du binaire ne sont pas nécessairement corrélés. Des choses comme le déroulement de la boucle et de fréquentes inline peut rendre le programme plus rapide, mais l'augmentation de la taille des fichiers binaires...
OriginalL'auteur Zak | 2013-03-09
Vous devez vous connecter pour publier un commentaire.
Il ya beaucoup de techniques pour réduire la taille du binaire en plus de ce
us2012
et d'autres l'ont mentionné dans les commentaires, résumant avec certains points de ma propre:-Os
de faire gcc/g++ optimiser pour la taille.-ffunction-sections -fdata-sections
pour séparer chaque fonction ou de données dans des sections distinctes au sein de l'unité de traduction. Combiner avec l'option de l'éditeur de liens-Wl,--gc-sections
pour se débarrasser de tout non référencées sections.strip
avec au moins l'une des options suivantes:-s -R .comment -R .gnu.version
. Il peut être combiné avec--strip-unneeded
pour supprimer tous les symboles qui ne sont pas nécessaires pour la réinstallation de traitement.OriginalL'auteur Tuxdude
Si votre code ne contient pas de c++-gestion des exceptions, vous pouvez économiser beaucoup d'espace (jusqu'à 30k après tout optimiser les étapes mentionnées par Tuxdude).
Par conséquent, vous devez fournir à l'indicateur suivant:
-fno-exceptions
Mais même si vous ne pas utiliser les exceptions, gestion des exceptions peuvent être inclus!
Vérifiez les étapes suivantes:
no usage of new, delete
. Si vous en avez vraiment besoin de les remplacer par malloc/free wrappers. Pour un exemple de la recherche pour "tinynew.cpp"fournissent la fonction de virtuelle pure appel, par exemple,
extern "C" void __cxa_pure_virtual() { while(1); }
Cheers
Flo
Point 3 a beaucoup aidé! Merci!
OriginalL'auteur flozn