Maximale Wertanzahl eines int-Arrays



  • Hi Leute!

    Ich hab heute mal ausprobiert, wie viel Elemente ein int-Array aufnehmen kann. Ich hab dann die Erfahrung gemacht, dass so 250000 (260000 Elemente gehen dann schon nicht mehr!) Elemente wohl noch gehen.

    Hier der Code:

    int main()
    {
    unsigned int test[1000000];

    system("PAUSE");
    return 0;
    }

    Wie kann ich nun c anweisen, dass ich mehr als 260000 Elemente haben möchte?



  • Es gibt, mal abgesehen vom Wertebereich von size_t, keine Beschraenkung fuer Arraygroessen. Du wirst wohl versuchen, zu viel Speicher am Stack zu allozieren, der ueblicherweise relativ klein ist (ein paar, wenige MB). Entweder, du aenderst also die Stackgroesse, oder - noch viel besser - du benutzt einen std::vector bzw. unique_ptr<T[]>.



  • vipor, welche speicherbereiche kennst du in C++? (Es gibt drei)



  • Du kannst versuchen

    int main()
    {
    static unsigned int test[1000000];
    
    system("PAUSE");
    return 0;
    }
    

    oder speicherbezogen äquivalent

    unsigned int test[1000000];
    int main()
    {
    
    system("PAUSE");
    return 0;
    }
    

    oder dynamisch

    int main()
    {
    unsigned int *test=calloc(1000000,sizeof*test);
    
    system("PAUSE");
    free(test);
    return 0;
    }
    

    Was hat das Ganze mit C++ zu tun?


  • Mod

    Wutz schrieb:

    Was hat das Ganze mit C++ zu tun?

    Bis zu deinem calloc war nichts in diesem Thread typisch für C.



  • krümelkacker schrieb:

    vipor, welche speicherbereiche kennst du in C++? (Es gibt drei)

    Ich kenn sogar 5!


  • Mod

    Jockelx schrieb:

    krümelkacker schrieb:

    vipor, welche speicherbereiche kennst du in C++? (Es gibt drei)

    Ich kenn sogar 5!

    Selbst im C++11-Klugscheißermodus komme ich nur auf 4.

    Ich möchte sehen.



  • Der Begriff "Speicherbereich" ist vielleicht nicht ganz eindeutig.

    Eure 3 waren wohl Heap/Stack/Const.
    Sutter hat noch Global/Free:

    http://www.gotw.ca/gotw/009.htm



  • Jockelx schrieb:

    Eure 3 waren wohl Heap/Stack/Const.

    Nein, die waren static, heap, stack. Und SeppJ wollte wohl noch thread local einwerfen. const und free als eignen Speicherbereich zu zählen, na ja, weiß nicht so recht.


  • Mod

    Meine waren static, automatic, dynamic und für Klugscheißer noch thread.

    Zu viele verschiedene Worte, die alle (fast) das gleiche bedeuten...



  • Wenn wir schon den Klugscheißermodus anwerfen: Es handelt sich bei all diesen Dingen nicht um Speicherbereiche, sondern um Speicherdauern. Ob ein funktionslokales Array im Speicher in der Nähe anderer Variablen mit automatischer Speicherdauer liegt, ist vom Standard nicht vorgeschrieben. 😃


Log in to reply