Warum ist es nicht gut, riesige Arrays lokal in C zu deklarieren? zB: int a [1000000];Deklarieren Sie große Arrays lokal in C
Antwort
Da sie auf dem Stapel deklariert sind, wenn Sie sie lokal deklarieren - und wenn der Stapel zu groß wird, haben Sie einen Stapelüberlauf und Ihr Programm wird abstürzen.
, weil sie auf den Stapel gehen, und es gibt nur eine begrenzte Menge an Speicherplatz auf dem Stapel,
Obwohl es möglich ist, den Stapelspeicher im Voraus zu einem gewissen Grad einzustellen, braucht man auch die Möglichkeit zu prüfen, die gleiche Funktion von einem Ausführungspfad durch die Funktion aufrufen. Zum Beispiel:
void a() { int a[10000000]; b(); }
void b() { d(); c(); }
void c() { a(); }
Da diese Analyse nicht immer einfach ist, kann es zum Überlauf kommen.
der Stapel ist klein (etwa 4 kb), aber Halde mehr Größe Variante Maschine hat, weist das Array dynamisch mit Zeigern malloc in int(),
sich bewusst seinen Zeiger und Glück
Der Stapel und der Heap können eine beliebige Größe haben (der Stapel kann 100 Mal größer sein als der Heap, wenn die Implementierung ihn so konfiguriert), aber der Stapel ist im Allgemeinen sehr klein und wird bei großen Zuordnungen überlaufen - besonders in rekursiven Funktionen.
- 1. C Programmierung Arrays große Ebene
- 2. Wie deklarieren Sie Arrays in einem C++ - Header?
- 3. Assoziative Arrays sind standardmäßig lokal
- 4. Deklarieren von Arrays in der Sprache c ohne Anfangsgröße
- 5. Deklarieren von Arrays als firstprivate in OpenMP - C
- 6. deklarieren Liste von festen Größe Arrays in C#
- 7. Deklarieren von statischen Arrays in PHP
- 8. Wie deklarieren Sie String-Konstanten in C?
- 9. OCaml - N-dimensionale Arrays deklarieren
- 10. mmaping große Dateien (für persistente große Arrays)
- 11. Was bedeutet eigentlich das Deklarieren und Instanziieren eines C# -Arrays?
- 12. Kann man Arrays ohne explizite Länge deklarieren?
- 13. Wie kann ich Arrays in struct deklarieren?
- 14. Kann nicht große Arrays erstellen
- 15. Cython Schnittstelle mit C++: Segmentierung Fehler für große Arrays
- 16. Wie deklarieren und verwenden Sie riesige Arrays von 1 Milliarde Ganzzahlen in C?
- 17. Verwendung von CodeVariableDeclaraionStament zum Deklarieren von Arrays
- 18. Probleme deklarieren Variablennamen in C++
- 19. Deklarieren Sie eine Struktur in C, ohne sie zu definieren
- 20. rekursive Merge-Sortierung, Segmentierungsfehler für große Arrays
- 21. Deklarieren flüchtiger Iterator in C++
- 22. Deklarieren schwimmt in Ziel c
- 23. Deklarieren eines 2D-Arrays von Zeigerobjekten
- 24. C++ deklarieren Sie ein Array von Arrays ohne die Größe kennen
- 25. Füllen große Array in C mit scanf
- 26. Multiplikation zweier Arrays in C
- 27. Große Zahl in C#. NET
- 28. Wie deklarieren Sie Methoden in Ziel c außerhalb der Schnittstelle?
- 29. Deklarieren Sie Typen ohne implizite Konvertierung in C++
- 30. In einer C# -Lösung, wo deklarieren Sie Lösungsumfang enums?
Hinweis: Wie heißt diese Seite? :) – Joni