Laenge eines Struct-Arrays.
-
@titan99_ sagte in Laenge eines Struct-Arrays.:
Ist ein Array immer im Stack?
Davon abgesehen daß es den Begriff im Standard nicht gibt, ja.
-
@Swordfish sagte in Laenge eines Struct-Arrays.:
@titan99_ sagte in Laenge eines Struct-Arrays.:
Ist ein Array immer im Stack?
Davon abgesehen daß es den Begriff im Standard nicht gibt, ja.
Nein, es liegt nicht immer auf dem Stack. Im allgemeinen Fall ist nicht einmal erzwungen, dass das Array als solches überhaupt im Speicher existiert - es kann auch komplett in Prozessorregistern liegen.
Beispiel:
int main(void) { int arr[] = {0, 1}; return arr[1]; }
Das kompiliert (mit Optimierungen an) zu:
mov eax, 1 ret
Kein Array auf irgendeinem Stack, aber
arr
ist trotzdem ein Array.
-
@wob sagte in Laenge eines Struct-Arrays.:
es kann auch komplett in Prozessorregistern liegen
Den Begriff kennt der Standard noch viel weniger.
-
@Swordfish sagte in Laenge eines Struct-Arrays.:
@wob sagte in Laenge eines Struct-Arrays.:
es kann auch komplett in Prozessorregistern liegen
Den Begriff kennt der Standard noch viel weniger.
Er hat ein Keyword dafür?
-
@SeppJ Okok, bedeutet aber nichts anderes als "Machs schnell und gib mir nie-nicht die Adresse, wie ist mir wurscht.".
-
@SeppJ sagte in Laenge eines Struct-Arrays.:
@Swordfish sagte in Laenge eines Struct-Arrays.:
@wob sagte in Laenge eines Struct-Arrays.:
es kann auch komplett in Prozessorregistern liegen
Den Begriff kennt der Standard noch viel weniger.
Er hat ein Keyword dafür?
-
@manni66 C-Forum...
Außerdem heißt das trotzdem, dass der Standard Register kennt.
@Swordfish sagte in Laenge eines Struct-Arrays.:
@SeppJ Okok, bedeutet aber nichts anderes als "Machs schnell und gib mir nie-nicht die Adresse, wie ist mir wurscht.".
Es heißt buchstäblich "Register", verhält sich wie ein Register, und ist gedacht für Register. Was willst du mehr?
-
@SeppJ sagte in Laenge eines Struct-Arrays.:
und ist gedacht für Register.
... und ist implementation-defined.
@SeppJ sagte in Laenge eines Struct-Arrays.:
Was willst du mehr?
Ich will garnichts. Ich hätte wohl besser schreiben sollen
"Einen Array-Typ im free-store zu haben geht schlecht."
-
@Swordfish sagte in Laenge eines Struct-Arrays.:
"Einen Array-Typ im free-store zu haben geht schlecht."
int (*foo)[123];
Tadaa!
*foo
hat Typint[123]
und es kann jede beliebige Speicherklasse haben.
-
@SeppJ autsch
-
Ich hätt da noch an was anderes gedacht...
struct foo { int x; int data[123]; }; foo * f = new foo();
Wäre das dann nicht auch ein Array im free store im Sinn der Frage?
-
@Mechanics ja, gibs mir
-
@manni66 sagte in Laenge eines Struct-Arrays.:
The keyword is unused and reserved.
(since C++17)Welchen C-Programmierer sollte das interessieren?
-
int (*foo)[123];
Tadaa!
*foo
hat Typint[123]
und es kann jede beliebige Speicherklasse haben.Hier wird foo definiert und nicht *foo. Hier wird nirgendwo ein Array definiert, d.h. hier kann auch keine Speicherklasse für ein Array vorgegeben werden.
Worauf foo zeigt, ist für eine explizit vorgegebene Speicherklasse irrelevant; nur für foo selbst kann mittels Spezifizierer eine Speicherklasse vorgegeben werden, und im Filescope (oft gleichgesetzt mit dem nicht standardkonformen "global") kann foo z.B. auch nie register werden.
-
@Wutz sagte in Laenge eines Struct-Arrays.:
int (*foo)[123];
Tadaa!
*foo
hat Typint[123]
und es kann jede beliebige Speicherklasse haben.Hier wird foo definiert und nicht *foo. Hier wird nirgendwo ein Array definiert, d.h. hier kann auch keine Speicherklasse für ein Array vorgegeben werden.
Worauf foo zeigt, ist für eine explizit vorgegebene Speicherklasse irrelevant; nur für foo selbst kann mittels Spezifizierer eine Speicherklasse vorgegeben werden, und im Filescope (oft gleichgesetzt mit dem nicht standardkonformen "global") kann foo z.B. auch nie register werden.Ja? Genau das ist der Punkt.
-
@SeppJ
Du zeigt in der Diskussion um Arrays einen Zeiger auf ein Array und beschreibst dessen Verhaltensweisen. Ein Array ist kein Zeiger. Ein Zeiger ist kein Array.
-
@SeppJ Sogesehen 1:0 Wutz.
-
@DirkB sagte in Laenge eines Struct-Arrays.:
@manni66 sagte in Laenge eines Struct-Arrays.:
The keyword is unused and reserved.
(since C++17)Welchen C-Programmierer sollte das interessieren?
Schon wieder nicht aufgepasst...
-
@Wutz sagte in Laenge eines Struct-Arrays.:
@SeppJ
Du zeigt in der Diskussion um Arrays einen Zeiger auf ein Array und beschreibst dessen Verhaltensweisen. Ein Array ist kein Zeiger. Ein Zeiger ist kein Array.@Swordfish sagte in Laenge eines Struct-Arrays.:
@SeppJ Sogesehen 1:0 Wutz.
Häh? Ich rede von
*foo
, nichtfoo
.*foo
ist vom Typint[64]
, das ist Fakt, da gibt es nichts zu diskutieren und auch nichts abzustimmen.