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

Set, mapa, unordered mapa, ile pamięci zużywa

Object Storage Arubacloud
+1 głos
264 wizyt
pytanie zadane 1 lutego 2023 w C i C++ przez pasjonat_algorytmiki Pasjonat (19,540 p.)
Jak mozna liczyć ile pamięci zużywa mapa, unordered mapa, set? Vector i tablica to wiadomo.

1 odpowiedź

0 głosów
odpowiedź 1 lutego 2023 przez Wiciorny Ekspert (270,170 p.)
wybrane 1 lutego 2023 przez pasjonat_algorytmiki
 
Najlepsza

W Cpp nawet nie wiesz ile pamięci zajmuje tablica... o ile nie jest na sztywno zdefiniowana. 

W C++, nie ma jednoznacznej odpowiedzi na to, ile pamięci zużywa dana struktura danych, ponieważ zależy to od implementacji. Ogólnie jednak można powiedzieć, że mapy, unordered_mapy i zbiory zużywają więcej pamięci niż wektory i tablice, ponieważ zawierają dodatkowe informacje, takie jak klucze map i zbiorów lub hasze unordered_map. W przypadku wektorów i tablic pamięć jest zarezerwowana tylko dla elementów.

Tak do sprawdzenia Możesz użyć operatora sizeof, aby określić, ile pamięci zajmuje konkretny obiekt danej struktury danych. Na przykład:

 

#include <map>
#include <unordered_map>
#include <set>
#include <vector>
#include <iostream>

int main() {
    std::map<int, int> m;
    std::unordered_map<int, int> um;
    std::set<int> s;
    std::vector<int> v;
    int arr[100];

    std::cout << "Size of map: " << sizeof(m) << std::endl;
    std::cout << "Size of unordered_map: " << sizeof(um) << std::endl;
    std::cout << "Size of set: " << sizeof(s) << std::endl;
    std::cout << "Size of vector: " << sizeof(v) << std::endl;
    std::cout << "Size of array: " << sizeof(arr) << std::endl;

    return 0;
}

Wynik będzie zależał od implementacji i konfiguracji systemu, ale powinien pokazać różnicę w zużyciu pamięci między różnymi typami danych.

1
komentarz 1 lutego 2023 przez adrian17 Ekspert (344,860 p.)

Czepialstwo:

W Cpp nawet nie wiesz ile pamięci zajmuje tablica... o ile nie jest na sztywno zdefiniowana. 

W C++, nie ma jednoznacznej odpowiedzi na to, ile pamięci zużywa dana struktura danych, ponieważ zależy to od implementacji.

Wiesz i jest jednoznaczna. To że zależy od implementacji akurat ma małe znaczenie na cele pytania, bo pytanie jest o praktyczne zużycie pamięci.

Tak do sprawdzenia Możesz użyć operatora sizeof, aby określić, ile pamięci zajmuje konkretny obiekt danej struktury danych.

Co jak co, ale sizeof nic ciekawego nie mówi o zajęciu pamięci w tym przypadku. To jak porównywać rozmiar budynków po rozmiarach wizytówek.

W każdym razie przy vectorze faktycznie się da (capacity()), przy unordered_map możesz najwyżej próbować estymować używając bucket_count(), (max)_load_factor() etc. W alternatywnych implementacjach jak absl::flat_hash_map nawet ładnie dokumentują jak estymować zużycie.

W praktyce jak ktoś bardzo potrzebuje coś takiego bardzo dokładnie mierzyć, to podpina aplikację pod profiler pamięci :)

komentarz 1 lutego 2023 przez Wiciorny Ekspert (270,170 p.)
edycja 1 lutego 2023 przez Wiciorny
Ale odnoszę się do sytuacji, nie deklaracji,  dynamicznej tablicy w której rozmiar nie jest sztywny i stały, a ilość elementów zmienna.
Akurat uwagi dobre, nie neguje, dziękuje
komentarz 2 lutego 2023 przez j23 Mędrzec (194,920 p.)

Jeszcze można by spróbować z własną implementacją std::allocator, która liczyłaby ilość przydzielanej pamięci.

Podobne pytania

0 głosów
1 odpowiedź 263 wizyt
0 głosów
1 odpowiedź 96 wizyt
pytanie zadane 14 października 2022 w C i C++ przez pasjonat_algorytmiki Pasjonat (19,540 p.)
0 głosów
1 odpowiedź 189 wizyt
pytanie zadane 18 marca 2021 w C i C++ przez Adamek185wp Obywatel (1,280 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...