String allokieren??



  • aber es muss ja auch 6 byte allokiert werden aufm speicher bei der ersten Variante



  • BorisDieKlinge schrieb:

    aber es muss ja auch 6 byte allokiert werden aufm speicher bei der ersten Variante

    Ja, aber statisch.



  • BorisDieKlinge schrieb:

    aber es muss ja auch 6 byte allokiert werden aufm speicher bei der ersten Variante

    die erste variante verbraucht sizeof(char)* R/W speicher und strlen("Hallo")+1 read-only speicher (wobei der string "Hallo" auch wiederverwendet werden kann, d.h. wenn es ihn vorher schon gibt, muss kein zweiter angelegt werden).
    🙂



  • man lernt nie aus... ! d.h. dynamische und statische Allokationen werden aber aufm gleichen speicher abgelegt, wobei es im chaos Prinzip stattfinden, d.h. es gibts keinen extra statischen und dynamischen bereich aufm Speicher (RAM) nehm ich an! Sorry wenn ich so blöd frage...



  • BorisDieKlinge schrieb:

    man lernt nie aus... ! d.h. dynamische und statische Allokationen werden aber aufm gleichen speicher abgelegt, wobei es im chaos Prinzip stattfinden, d.h. es gibts keinen extra statischen und dynamischen bereich aufm Speicher (RAM) nehm ich an! Sorry wenn ich so blöd frage...

    Ich seh da keine dynamische Allokation, Du?

    Das Array landet auf dem Stack der Funktion, der Zeiger auch, aber das "Gezeigte" (der String) liegt im Zeigerfalle irgendwo in einem (möglicherweise ReadOnly-)Datenbereich.



  • Der Speicher wird schon sauber unterteilt in statischen Bereich (für globale Variablen, static Variablen, String-Literale), Stack (für "normale" Variablen und Funktionsparameter) und Heap (für alles, was du per malloc() bzw. new anforderst) - und jede Variable landet in "ihrem" Bereich.



  • BorisDieKlinge schrieb:

    man lernt nie aus... ! d.h. dynamische und statische Allokationen werden aber aufm gleichen speicher abgelegt, wobei es im chaos Prinzip stattfinden, d.h. es gibts keinen extra statischen und dynamischen bereich aufm Speicher (RAM) nehm ich an! Sorry wenn ich so blöd frage...

    doch. Die statische Sachen werden auf dem Stack angelegt. Dynamischer Speicher (Speicher angefordert durch malloc & Co.) wird vom Heap entnommen.

    edit: 😡 zu spät, dumme Wiki Links kosten Haufen Zeit



  • LordJaxom schrieb:

    Ich seh da keine dynamische Allokation, Du?

    die allokation von stackvariablen könnte man schon als dynamisch bezeichnen 😉

    CStoll schrieb:

    Der Speicher wird schon sauber unterteilt in statischen Bereich (für globale Variablen, static Variablen, String-Literale), Stack (für "normale" Variablen und Funktionsparameter)...

    string-literale sind konstanten und befinden sich normalerweise nicht im selben segment, in dem sich statische und globale variablen befinden.
    ...und funktionsparameter müssen nicht zwangsläufig über den stack wandern.
    🙂

    boris, du enttäuscht mich. als professioneller windows-entwickler scheinen dir fundamentale grundlagen zu fehlen 😞



  • tja bei manchen sachen ging ich nie so ins detail.. hab halt drauflos programmiert;)

    Naja ist schon komisch, oft hört man hier , man soll nicht im detail anfangen, also bspw. std::string verwenden ohne zu wissen was dahinter steckt! und wenn man übers detail mal ne nichts bescheid weis, wird man auch angemekkert.. tzzz 😃

    P.S: mit dynamisch meinte ich oben , das man bei char x[n]= "..." den inhalt ändern kann, iund bei cjhar *x="..."; nicht...



  • BorisDieKlinge schrieb:

    Naja ist schon komisch, oft hört man hier , man soll nicht im detail anfangen, also bspw. std::string verwenden ohne zu wissen was dahinter steckt! und wenn man übers detail mal ne nichts bescheid weis, wird man auch angemekkert.. tzzz 😃

    ist ja nicht böse gemeint. 🙂
    irgendwas zu verwenden, ohne zu wissen was dahintersteckt ist eigentlich nie zu empfehlen. man muss sich ja nicht jeden kleinkram merken, aber sowas wie arrays und pointer sind elementar und die unterschiede sollte man kennen.

    BorisDieKlinge schrieb:

    P.S: mit dynamisch meinte ich oben , das man bei char x[n]= "..." den inhalt ändern kann, iund bei cjhar *x="..."; nicht...

    man kann stringkonstanten nicht ändern, aber ein char* kann natürlich auch auf ein normales array zeigen, dessen elemente veränderbar sind. beispiel:

    char array[] = "hello"; 
    char *p = array;  // pointer, über den man das array verändern kann.
    

    🙂



  • jo das meinte ich:) thx


Anmelden zum Antworten