• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ wyjątki - problem

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
49 wizyt
pytanie zadane 1 dzień temu w C i C++ przez benny13 Obywatel (1,030 p.)

Cześć mam do napisania następujący program:

Napisz program, który przetestuje jak dużo pamięci można zaalokować dynamicznie,  zanim wyrzucony zostanie wyjątek bad_alloc. Zanotuj ostatni poprawnie zaalokowany rozmiar.

lecz niestety kompletnie nie wiem, jak go wykonać, byłby ktoś w stanie pomóc? Z góry dzięki ;)

1 odpowiedź

0 głosów
odpowiedź 1 dzień temu przez adrian17 Ekspert (327,560 p.)
- robisz nieskończoną pętlę

- w środku pętli w kółko alokujesz jakąś ilość pamięci używając `new` (np tablicę miliona charów, to równo megabajt). Nie zwalniaj jej.

- dodajesz do jakiejś zmiennej liczącej ile już zaalokowałeś

- owijasz kod w try-catch

I tyle.

Alternatywnie, zamiast alokować w kółko pamięć, może im chodzić o to żeby alokować i zwalniać (new-delete) coraz większe tablice - milion charów, potem 2 miliony, potem miliard etc etc i zobaczyć kiedy _to_ się nie uda.
komentarz 1 dzień temu przez reaktywny Nałogowiec (30,230 p.)
Pomysł może dobry, tylko jak program "pierdyknie" to czy będziemy wiedzieli w którym momencie. Trzeba by zapisywać w jakimś logu kolejne operacje.

Druga sprawa jak jest ze SWAP w OS, czy gdy nie brakuje pamięci nie jest zwiększany SWAP na dysku??
1
komentarz 1 dzień temu przez adrian17 Ekspert (327,560 p.)

jak program "pierdyknie"

Ideowo, po to jest łapanie wyjątku. No i zawsze możesz wypisywać przed alokacją, a nie po.

Druga sprawa jak jest ze SWAP w OS, czy gdy nie brakuje pamięci nie jest zwiększany SWAP na dysku??

Zależy od systemu. Na przykład na linuxie możesz sobie spokojnie zaalokować znacznie, znacznie więcej niż myślisz że byś mógł (overcommit) i bardzo rzadko rzuci Ci wyjątkiem (za to później OOM killer może twardo ubić proces). Dla odróżnienia, AFAIK Windows twardo trzyma się limitu ram+swap. Domyślam się że o zaobserwowanie tego zachowania chodzi właśnie w tym zadaniu.

(ale rozmiar swapa to jest twardy limit w konfiguracji, system go sam sobie nie zwiększa)

komentarz 1 dzień temu przez reaktywny Nałogowiec (30,230 p.)
Dzięki za wyjaśnienie!

Podobne pytania

0 głosów
1 odpowiedź 86 wizyt
pytanie zadane 19 grudnia 2020 w C i C++ przez Eriss69 Gaduła (4,050 p.)
0 głosów
2 odpowiedzi 162 wizyt
pytanie zadane 12 października 2020 w C i C++ przez Hubert_123 Początkujący (380 p.)
0 głosów
2 odpowiedzi 162 wizyt
pytanie zadane 28 sierpnia 2020 w C i C++ przez alek747 Nowicjusz (120 p.)

90,295 zapytań

138,894 odpowiedzi

311,078 komentarzy

60,009 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...