============ Datensegment ============ Werden Daten uninitialisiert im Datensegment angelegt, dann benötigen diese keinen Platz im ausführbaren Programm. In der ausführbaren Datei steht nur ein Vermerk wie viel Daten benötigt werden. Vom Programmlader wird dann die gewünschte Datenmenge im Datensegment mit Null initialisiert. Wenn Daten initialisiert im Datensegment angelegt werden, dann wird die Ausführbare Datei größer. Dies wollen wir experimentell bestätigen! Etwas über Dateigrößen ====================== Dateien werden in Blöcken gespeichert. Ist die Blockgröße zum Beispiel 512 Byte dann ist die minimale Dateigröße 512 Byte. Mit dieser Schrittweite wachsen dann auch Dateien. Das heisst um 513 Bytes zu speichern benötigt man 1024 Bytes auf der Festplatte. Zur Demonstration erzeugen wir eine Datei, die nur eine `1` (und ein newline) enthält und überprüfen die Dateigröße: *--[SHELL]----------------------------------------------------------------* | | | echo "1" > small_file | | cat small_file | | ls -s -k small_file | | | *-------------------------------------------------------------------------* Die Blockgröße ist hier also 4KB = 4096Byte. Beispiel Programm ================= In folgendem Programm werden die Arrays `block1`, ..., `block4` entweder initialisiert oder uninitialisiert angelegt. Jedes Array hat eine Größe von 1KB. Außerdem kann noch zusätzlich die Variable `little_more` initialisiert oder uninitialisiert angelegt werden. :import: day01/data.c Wir übersetzen mehrfach und initialisieren jeweils einen Block mehr und am Ende noch die Variable `little_more`: *--[SHELL(path=day01)]----------------------------------------------------* | | | gcc-4.8 -o data data.c | | ls -s -k data | | gcc-4.8 -o data_b1 -DINIT_BLOCK1 data.c | | ls -s -k data_b1 | | gcc-4.8 -o data_b2 -DINIT_BLOCK1 -DINIT_BLOCK2 data.c | | ls -s -k data_b2 | | gcc-4.8 -o data_b3 -DINIT_BLOCK1 -DINIT_BLOCK2 -DINIT_BLOCK3 data.c | | ls -s -k data_b3 | | gcc-4.8 -o data_b4 -DINIT_BLOCK1 -DINIT_BLOCK2 -DINIT_BLOCK3 +++| | -DINIT_BLOCK4 data.c | | ls -s -k data_b4 | | gcc-4.8 -o data_b4 -DINIT_BLOCK1 -DINIT_BLOCK2 -DINIT_BLOCK3 +++| | -DINIT_BLOCK4 -DINIT_LITTLE_MORE data.c | | ls -s -k data_b4 | | | *-------------------------------------------------------------------------* :navigate: __up__ -> doc:index __back__ -> doc:day01/page02