Betriebssystemabhängigkeiten



  • Hi 🙂

    Aus wie vielen Zeichen kann denn max. ein String bestehen? Und aus wie vielen Elementen ein Array?

    Das max_size() für Strings scheint mir ungefähr die Hälfte des maximalen Werts für signed int Werte zu liegen. Darum habe ich irgendwie die Vermutung, dass die max. Länge eines Strings vom Betriebssystem abhängt. Also ob das z. B. ein 32bit- oder ein 64bit-Betriebssystem ist.

    Und falls meine Vermutung richtig ist, würde ich noch weiter vermuten, dass es bei Arrays ähnlich ausschaut.

    Sind meine Vermutungen richtig? 🙂

    #include <iostream>
    #include <cstdlib>
    #include <string>
    using namespace std;
    
    int main(int argc, char *argv[]) {
       string s{"abc"};
       cout << s.max_size() << endl;
    
       vector<int> v(0);
       cout << v.max_size() << endl;
    
       return EXIT_SUCCESS;
    }
    

    Liefert auf meinem 32bit-Betriebssystem:
    Für den String: 1.073.741.820
    Für das Array: 1.073.741.823

    32bit signed int max-Wert: 2.147.483.647



  • In etwa, allerdings hängt es vom Compiler bzw. seiner Standardbibliothek ab, welche wiederum mit der CPU-Architektur zusammenhängen. Das Betriebssystem hat damit nur indirekt zu tun.

    edit: Da stand Schwachsinn, wehe das zitiert einer.



  • Jetzt habe ich noch im Script ein wenig hinzugefügt.

    Interessant ist der kleine Unterschied zwischen String und Vector. Ich vermute, das kommt daher, dass am Ende der Strings immer noch das \0 ist. Darum ist der Wert für Strings etwas kleiner. Bei den Strings scheint das die wirklich effektiv nutzbare maximale Stringlänge zu sein. Stimmt das? 🙂

    Aber eigentlich hätte ich erwartet, dass bei den Arrays der doppelte Wert rauskommt, also diese 2,1 Millionen 😕


  • Mod

    tröröö schrieb:

    Aber eigentlich hätte ich erwartet, dass bei den Arrays der doppelte Wert rauskommt, also diese 2,1 Millionen 😕

    2.1 Milliarden.

    Spekulation: Vielleicht benötigt die Implementierung, die du benutzt, intern Differenzen zwischen Pointern, die auch negativ sein können. Um sowohl die Differenz zwischen erstem und letzten als auch letztem und ersten Verarbeiten zu dürfen, darf diese daher vom Betrag her maximal 1 Milliarde sein.



  • Öhm, klar ... Milliarden, sorry 😃

    Hat wer von euch ein 64bit-Betriebssystem? Was kommen dann da für Werte raus?



  • tröröö schrieb:

    Hat wer von euch ein 64bit-Betriebssystem? Was kommen dann da für Werte raus?

    string:       18446744073709551614
    vector<int>:  4611686018427387903
    vector<char>: 18446744073709551615
    


  • Ha. Strange.



  • 4611686018427387897
    4611686018427387903
    18446744073709551615


Log in to reply