2017-07-28 3 views
0

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

+0

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? –

+0

C'était mon erreur - regarde ma question mise à jour. – Mikola

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.