Variablen in C

Hallo zusammen,

Ich schaue mir grad mal wieder paar basics in C an und da sind paar Lücken wie ich gemerkt hab, daher in paar Fragen an euch :

1. Der Speicherort einer Variablen wird vom Compiler bestimmt, ich würde mal gerne wissen nach welchem Prinzip dies geschieht !

2. Gibt es eine offizielle Quelle in der steht, welche Größe Variablen haben müssen und welche es gibt ( jetzt neben dem Stanard ) ich habe jetzt gelesen das es sowas wie long long gibt usw. ?

Danke im voraus

Nachtrag :

Mich würde auch mal interessieren, wie das intern mit dem const geregelt wird !
Mich würden auch mal genauere Informationen zu den Speicherklassen register und auto interessieren, sowie ein Beispiel zu volatile.
 
Hallo,
2. ANSI-C Standard.

Dabei gilt:
char - min. 1 Byte ( min. 8 Bit)
short - min. 2 Byte (min. 16 Bit)
int - Je nach Computer, auf 32 Bit-CPU => 32 Bit, auf 64 Bit-CPU => 64 Bit, also meisten 16, 32 oder 64 Bit
long - min. 4 Byte (min. 32 Bit)
long long - 8 Byte (min. 64 Bit), neu seit ANSI C99, mache Compiler unterstützen Typen nicht
float - 4 Byte
double - 8 Byte
long double - 10 Byte

Desweitern soll gelten:

long long > long > int > short > char

3. Möchtest du den Unterschied zwischen intern und const wissen?
Also auto ist der default-Wert. Sprich wenn ein Block (z.B. eine Funktion) fertig ist, wird der Wert aus den Speicher gelöscht.
Bei static bleibt die Variable weiter im Speicher erhalten, um bei einem erneuten Aufruf wieder zur Verfügung zu stehen.
Register-Variablen sind Variablen, die im CPU-Register gehalten werden sollen.
Dies kann der Compiler allerdings ignorieren (wird auch meistens), desweiteren passen viele Variablen gar nicht in 1 Register.

Mit volatile wird eine Funktion immer wieder aus dem Hauptspeicher geladen. Dies wird vorallem bei der Programmierung von peripheren Geräten benutzt.
 
Original von Dawen
Hallo zusammen,

Ich schaue mir grad mal wieder paar basics in C an und da sind paar Lücken wie ich gemerkt hab, daher in paar Fragen an euch :

1. Der Speicherort einer Variablen wird vom Compiler bestimmt, ich würde mal gerne wissen nach welchem Prinzip dies geschieht !

2. Gibt es eine offizielle Quelle in der steht, welche Größe Variablen haben müssen und welche es gibt ( jetzt neben dem Stanard ) ich habe jetzt gelesen das es sowas wie long long gibt usw. ?

Danke im voraus

Nachtrag :

Mich würde auch mal interessieren, wie das intern mit dem const geregelt wird !
Mich würden auch mal genauere Informationen zu den Speicherklassen register und auto interessieren, sowie ein Beispiel zu volatile.

zur ersten frage: es kommt darauf um was für eine art von variable es sich dabei handelt. wenn ein programm in den speicher geladen wird, stehen globale variablen im sogenannten data-segment (die einzelnen anweisungen im text-segment). data-segment unterscheidet sich darin, dass er beschreibbar ist im gegensatz zum text-segment, welcher read-only ist. im daten-segment gibt es noch einen weiteren bereich, der bss heißt. in ihm stehen globale variablen, die nicht initialisiert wurden.
lokale variablen stehen jeweils im kontext derjenigen funktion in der sie benutzt werden auf dem stack und sind daher auch nur innerhalb der entsprechenden funktion sichtbar, also ansprechbar, weil der stack beim aufruf einer funktion "aufgebaut" und nach beenden dieser wieder "abgebaut" wird.

wenn datenstrukturen während der laufzeit dynamisch erzeugt werden z.b. mit hilfe der malloc-funktion, kommen die variablen in den so genannten heap oder besser gesagt, der speicher für diese wird aus dem heap zugewiesen.

ich hoffe dass es deine fragen ein wenig beantwortet. im große ganzen geht es nur darum, dass diese unterteilung in die bereiche keine entshceidung des compilers ist, sondern sozusagen "allgemeingültig", weil z.b. der stack schon vom prozessor unterstützt wird und gewisse operationen dafür bietet usw. d.h. das vorgehen ist hier letztlich durch die architektur festgelegt wie es sein sollte. ich hoffe ich bringe jetzt nichts durcheinander.

grüße,
alpha.
 
Zurück
Oben