Repository navigation
vector vs tab
Stas edited this page Oct 13, 2026
·
4 revisions
-
Surowa tablica lokalna (
Raw Array na stosie):- Umieszczana bezpośrednio w ramce stosu.
- Obciążona sztywnym limitem stosu (zazwyczaj 1 MB na Windows, 8 MB na Linux).
- Duże deklaracje tablic lokalnych skutkują natychmiastowym błędem przepełnienia stosu (Stack Overflow).
- Ulega degradacji do wskaźnika (
array decay) przy przekazaniu do funkcji, co uniemożliwia weryfikację jej rozmiaru przez kompilator.
-
Tablica statyczna / globalna (Sekcja
.bss):- Alokowana w segmencie danych programu bez narzutu na stos i alokator sterty.
- Strony pamięci są zerowane na poziomie jądra systemu operacyjnego z wykorzystaniem techniki Copy-on-Write (strony fizyczne są mapowane dopiero w chwili faktycznego zapisu).
- Adres bazowy jest stały i znany na etapie konsolidacji (linkowania), co eliminuje konieczność dereferencji wskaźnika bazowego.
-
Kontener
std::array:- Cienki obiektowy wrapper na surową tablicę o zerowym narzucie pamięciowym (
0 B). - Nie podlega degradacji do wskaźnika, zachowuje pełne metadane o rozmiarze i wspiera semantykę wartości.
- Cienki obiektowy wrapper na surową tablicę o zerowym narzucie pamięciowym (
-
Kontener
std::vector:- Alokuje bufor danych wyłącznie na stercie (Heap) i zarządza nim w modelu RAII.
- Sam obiekt zajmuje na stosie 24 bajty (trzy 64-bitowe wskaźniki: początek bufora, koniec danych, koniec zaalokowanej przestrzeni).
- Odczyt wymaga dereferencji wskaźnika bazowego, a powiększenie bufora wiąże się z reallokacją i przeniesieniem elementów.
-
Gęsty zbiór kluczy o znanym, niewielkim limicie (
$\le 10^7$ ):
Wybierz statyczną tablicę bezpośrednią w sekcji.bssze znacznikiem 64-bitowym. Gwarantuje to maksymalną przepustowość odczytu/zapisu bez alokacji dynamicznej. -
Dowolne, rzadkie identyfikatory bez limitu:
Wybierz płaską mapę haszującą (flat hash map), minimalizując zużycie pamięci do rozmiaru zbioru roboczego. -
Klucze rzadkie z twardym rygorem pamięciowym:
Zastosuj strukturę typu Bounded LRU Cache, która odcina nadmiarowe wpisy i zapobiega wyciekom pamięci. -
Zmienna liczba elementów znana dopiero w runtime:
Zastosuj dynamiczny bufor na stercie (std::vector), chroniący przestrzeń stosu przed przepełnieniem.