Je m'attendais à ce que, après l'exécution du programme, l'utilitaire supérieur affiche la mémoire (colonne VIRT) utilisée par mon programme égale ou supérieure à la taille sur le disque. J'ai été surpris lorsque le résultat était différent - la taille du fichier sur le disque s'est avérée supérieure à celle du haut. Pourriez-vous expliquer ce qui ne va pas dans mes attentes .... P.S. L'application est native construite avec gcc.Utilisation de la RAM après le chargement du programme - incompatibilité avec les statistiques TOP
Q
Utilisation de la RAM après le chargement du programme - incompatibilité avec les statistiques TOP
0
A
Répondre
1
Toutes les parties d'un fichier exécutable ne sont pas mappées en mémoire lorsque vous l'exécutez.
Si vous examinez votre exécutable avec readelf -WS <executable>
(en supposant le format elf exécutable), vous pouvez voir la liste des sections de fichiers. Seules les sections avec le drapeau A (alloc)
sont chargées.
Par exemple, les sections commençant par .debug
ne sont pas mappées, sauf si elles s'exécutent sous un débogueur, et ces sections sont souvent les plus grandes.
Pouvez-vous expliquer pourquoi vous vous attendez à cela? À moins que l'application ne fasse rien sauf retourner immédiatement, il y a généralement des bibliothèques partagées, des sections de données, etc. qui utilisent de la mémoire. Et si vous vous attendiez à ce que la mémoire utilisée soit plus que le fichier, pourquoi maintenant étonné que ce soit plus? –
C'était mon erreur - regarde ma question mise à jour. – Mikola