Code:
#include <stdio.h>
int main(void) {
char szName[128];
printf("Input your name: ");
fgets(szName, sizeof(szName) - 1, stdin);
szName[strlen(szName) - 1] = '\0';
printf("ntHello %s, wazzup?", szName);
getchar();
return 0;
}
Variablen sind Labels für Adressen im Speicher.
Größenspezifizierer (8 Bit = 0 bis 255 = 256d):
Byte ~ 1 Byte : 00000000b (-128 bis 256)
Word ~ 2 Byte : 00000000 00000000b (-32768 bis 65536)
Dword ~ 4 Byte : 00000000 00000000 00000000 00000000b (-2147483648 bis 4294967295)
Qword ~ 8 Byte : (-9223372036854775808 bis 18446744073709551616)
Tbyte ~ 10 Byte : (0 bis 99,999,999,999,999,999,999)
In C:
char/BOOL = 1 Byte
int = 4 Byte
long = 4 Byte
Strings sind eine Abfolge von einzelnen Bytes
Bytes werden mit einer bestimmten Ordnung in den Speicher gelegt und herausgenommen, die Plattform-spezifisch ist, was aber nur intern stattfindet und für den Endbenutzer nahezu irrelevant ist.
Will man nun den Wert 'einer Variablen' (4 Bytes reserviert), lesen, so gibt man den Variablennamen an, der representativ für die Adresse im Speicher steht (wird vom Assembler übersetzt), und dann werden ab dieser Adresse 32 Bits ausgelesen.
Ist eine Deklaration, Definition und Initialisierung einer Variablen, die im Speicher 4 Bytes den Wert 0 geben wird.
Code:
char sz[] = "Hallo";
Dieser Wert findet sich ebenso im Datensegment der Executable wieder und wird zur Laufzeit in den Speicher geschrieben.
Dies ist nur eine Deklaration und Definition (uninitialisiert), woraus folgt, dass die Menge der Bytes, die im Header der Executablen angegeben und reserviert wird (Bei XP ist der zur Verfügung stehende RAM maximal 4GB groß), inkrementiert wird.
-------- --------
Würde also die Executable vergrößern
Dafür würden bei der Ausführung dieser Befehle ein paar
Cycles dazu kommen ;-)