2010-11-28 36 views
3

Dans les tests que j'ai exécutés la mémoire dans la section bss de mes programmes a toujours été initialisé à zéro avant d'y écrire quoi que ce soit. Est-ce une coïncidence, ou est-ce que le système "nettoie" ces pages de mémoire avant de me les remettre? J'utilise l'assembleur nasm sur Ubuntu (si cela peut faire une différence).Assemblage Linux; bss section mémoire initialisée à 0?

Répondre

3

Le fichier exécutable de votre application (ELF) contient des informations sur la taille de la section BSS. Au démarrage, le noyau alloue un bloc de mémoire pour la section BSS et le nettoie à 0. Ceci est défini par ABI (Application Binary Interface). vous ne devez pas vous inquiéter il y a des différences sur une machine différente.

+1

Merci, trouvé la référence pour cette en utilisant votre réponse: http://refspecs.linux-foundation.org/LSB_4.0.0/LSB-Core-generic/LSB-Core-generic/specialsections.html Pour les systèmes Linux, cela apparaît spécifié dans la base de normes Linux. – kasterma

0

Oui BSS est initialisé à zéro.

+0

Avez-vous une référence canonique * (en majuscule) * pour cela? –

+0

bien, man gcc dit que les variables initialisées à zéro sont placées dans le BSS, donc pour que cela soit légal, le BSS doit être initialisé à zéro. – lijie

+1

@ T.J.Crowder, j'ai trouvé une référence pour cela en utilisant la réponse de @Huang F. Lei. La référence est la Linux Standard Base, spécifiquement à la page: http://refspecs.linux-foundation.org/LSB_4.0.0/LSB-Core-generic/LSB-Core-generic/specialsections.html – kasterma