dyn char[] array einlesen



  • Guten Abend,

    habe zwei Probs

    1. for (int i =0; i<=1000;i++){
      char *arr = new char [1048576];

    getchar();

    }

    Das sollte eig. genau 1 MB pro Schleife reservieren aber ich beobachte dass im Taskman. und der Speicher wächst immer um 1028K. Warum ?

    1. char *arr=new char[] ;
      cin >> *arr;

    Kann das überhaupt funktionieren oder muss ich dass über string machen ?

    Danke.



  • Ueberschreibst Du dabei nicht bei jedem Schleifendurchlauf Dein Char-Array?


  • Mod

    drave schrieb:

    Guten Abend,

    habe zwei Probs

    1. for (int i =0; i<=1000;i++){
      char *arr = new char [1048576];

    getchar();

    }

    Das sollte eig. genau 1 MB pro Schleife reservieren aber ich beobachte dass im Taskman. und der Speicher wächst immer um 1028K. Warum ?

    Warum nicht? Wer sagt dir, dass da nicht noch irgendwelche anderen tollen Sachen passieren? New könnte vielleicht schonmal etwas mehr Speicher im voraus anfordern, damit's beim nächsten Mal schneller geht. Oder irgendwelche Debuginformationen werden an dein char Array gehängt. Oder das Betriebssystem ist heute besonders spendabel. Oder oder oder.

    1. char *arr=new char[] ;
      cin >> *arr;

    Kann das überhaupt funktionieren oder muss ich dass über string machen ?

    Wenn du es richtig machen würdest (das ist falsch, wie du es machst) kann das auch gehen. Spricht was gegen string? String hat schließlich fast nur Vorteile gegenüber der Frickelei mit char Arrays, besonders wenn man mit dynamischer Speicherverwaltung anscheinend noch nicht so sehr vertraut ist.



  • Zu 1) Ja das habe ich mir auch gedacht.

    Zu 2) Ich habe n Prakt Info dieses Sem und die woltle es gerne mit Char sehen denke ich, wie würde es denn richtig aussehen ?



  • SeppJ schrieb:

    New könnte vielleicht schonmal etwas mehr Speicher im voraus anfordern, damit's beim nächsten Mal schneller geht

    würde ich zumindest schon mal stark anzweifeln wollen^^
    wenn ich new[x] schreibe, dann denkt der Compiler bestimmt als allerletztes dran, mir mehr Speicher zu geben, als ich möchte - das einzige was passieren kann(wird), dass er vom OS ein bis auf ein Vielfaches einer 2er Potenz(die größe einer Speicherseite - unter Win imho 2^12 Byte) aufgerundeten Speicherbrocken bekommt - das hat aber auch nicht viel damit zu tun, dass es beim nächsten mal schneller geht sondern nur, weil das OS das lieber mag^^

    bb



  • TGGC schrieb:

    unskilled schrieb:

    wenn ich new[x] schreibe, dann denkt der Compiler bestimmt als allerletztes dran, mir mehr Speicher zu geben, als ich möchte

    Es geht auch nicht darum, das du den Speicher bekommst. New stellt dir den Block bereit den du anforderst - aber was es sonst noch intern macht, das weisst du nicht. z.b. ist es im Debugmode ueblich, das es gewisse Fences um den Block errichtet - die werden bei delete dann wieder gecheckt.

    Und hat damit 0 mit dem Thema zu tun...



  • @drave probier das programm mal aus, nachdem du es im im release modus kompiliert hast ( wie hier schon vorgeschlagen wurde ).

    mfg


Anmelden zum Antworten