Es gibt kein "sollte" oder "sollte nicht" für nicht initialisierte Daten . Es kann sein, was es verdammt gut gefällt. Alle Nullen sind eine Möglichkeit - ebenso alle Einsen und zufälliger Müll. In der Tat sind alle Nullen eine völlig akzeptable Form von zufälligem Müll. Anstatt sich mit den uninitialisierten Daten in verschiedenen Boxen zu beschäftigen, initialisieren Sie sie, und dann (und nur dann) können Sie wissen, was es sein soll.
Bei bestimmten Linux-Boxen scheinen die Variablen im Stack auf 0 initialisiert zu werden - warum?
Ich habe ein fehlerhaftes Programm, das eine Variable auf den Stapel schiebt und ohne Initialisierung verwenden kann.
Ich nehme dasselbe Binärprogramm und führe es auf verschiedenen Linux-Boxen aus. Diese Boxen haben unterschiedliche CPUs (i5, i7), aber ansonsten laufen sie dieselbe Fedora-Distribution.
Ein Kasten, ich kann das Problem leicht fangen, weil die Variable zufällige Daten hat.
In einer anderen Box werden die Stack-Variablen jedoch immer auf 0 initialisiert (auch wenn sie nicht sein sollten).
Ich versuche, die Ursache für dieses unterschiedliche Verhalten festzulegen. Wohin muss ich schauen? Was kann das bewirken? Gibt es Kernel-Features, die dies beeinflussen können?
2 Antworten auf die Frage
In C hängt die Initialisierung von Variablen von der Optimierungsstufe ab, zu der das Programm erstellt wurde.
Die Optimierungsstufe 3 initialisiert keine Variablen im Stapel.
gcc -O3 program.c -o program
Verwandte Probleme
-
2
Wie installiere ich iTunes unter Wine?
-
3
Wie kann ich Firefox an die Fenstergröße erinnern?
-
1
Warum erhalte ich einen langsamen Netzwerkdurchsatz, wenn ich einen fehlerhaften DNS-Server habe?
-
2
Warum aktualisiert sich mein Pfad nicht * jetzt *?
-
7
Wie können Sie nachverfolgen, welche Pakete unter Fedora (Linux) installiert wurden?
-
2
Erhöhen Sie die Bildschirmauflösung von Fedora 11
-
2
Vorteile von Ubuntu LTS-Versionen gegenüber normalem Ubuntu?
-
1
Fedora ifup und Network Manager
-
3
Linux DD-Befehl: Wie extrahiert man Dateien aus einem ISO-Image?
-
1
Warum verschwanden die laufenden Anwendungen in der Fedora-Taskleiste?