• [^] # Re:J'ai séparé ma classe en 2 fichiers .h et .cpp et le code est plus gros

    Posté par . En réponse au message Faire une réduction de code en supprimant les fonctions non utilisées. Évalué à 3.

    Bon je comprend pas vraiment le coups des nombres ni le soucis avec le C++ mais voici les règles que j'utilise pour du code en C (donc ça devrais etre transposable).
    Si j'ai deux fichiers (ou plusieurs ) contenant du code potentiellement non-utilisé mais sans que je souhaite le supprimer manuellement je fais

    gcc -c -Os -fdata-sections -ffunction-sections main.c -o main.o
    gcc -c -Os -fdata-sections -ffunction-sections file1.c -o file1.o

    Ca demande à GCC pour chaque fichier de créer une section header elf spécifique à chacun de ces fichiers.
    Un fichier contient a minima une section .bss pour les données et une section .text pour le programme. Quand tu ne spécifie rien, un fichier = une section de chaque type.

    Donc l'élimination du code inutilisé ce base sur l'entité d'un fichier, si une partie est utilisé le fichier est entièrement mis dans l'exe finale.

    Si à l’intérieur d'un fichier je souhaite plusieurs sections pour permettre une élimination plus fine (par exemple une par fonction ) je dois spécifier ca dans l'attribut de la fonction

    void foobar (void) attribute ((section ("bar")));

    ensuite l’édition de lien (soit avec ld soit avec gcc en front-end) ce fait avec l'option
    --gc-sections (pour garbage collector section ) c'est a dire mettre à la poubelle les sections non-utilisée.

    ensuite j'utilise soit readelf (des binutils), soit objdump -Dslhx pour voir ce que contient le code finalement linké

    Il faut bien ce rendre compte qu'en faisant ça, on multiplie le nombre de section et donc on augmente la taille de l'exe finale il faut donc faire des compromis.

    Je fais ca régulièrement car j'utilise gcc pour produire du code embarqué ou chaque kilo de mémoire est compté et je dois maitrisé le placement de certaine fonction en flash et d'autre en RAM.
    Voila mes deux cts