46 Stimmen

Wie kann ich den Speicherverbrauch von std::map abschätzen?

Ich habe zum Beispiel eine std::map mit bekannter sizeof(A) und sizeof(B), wobei die map N Einträge enthält. Wie würden Sie den Speicherverbrauch schätzen? Ich würde sagen, es ist etwas wie

(sizeof(A) + sizeof(B)) * N * factor

Aber was ist der Faktor? Eine andere Formel vielleicht?

Vielleicht ist es einfacher, nach einer Obergrenze zu fragen?

4 Stimmen

Nur um das klarzustellen, es ist std::map<A, B> richtig?

0voto

abhiarora Punkte 8673

Ich war auch auf der Suche nach einer Möglichkeit, die Größe der std::map . Ich habe versucht, was in Diomidis Spinellis Ich habe die Antwort des Autors gelesen und seine Antwort hier erweitert, was für andere hilfreich sein könnte.

Ich erweitere seine Antwort durch Hinzufügen einiger Codezeilen.

#include <bits/stl_tree.h>
int main(int argc, char *argv[])
{
    std::cout << sizeof(std::_Rb_tree_node_base) << std::endl;
    return 0;
}

Ausgaben (Auf meinem ARM Cortex A-9 iMX6Solo-X Prozessor unter Linux [4.9.175] und Compiler: arm-fslc-linux-gnueabi-gcc (GCC) 7.3.0 ):

16

Unter Berücksichtigung von std::map<A, B> Ich interessiere mich für die Größe der ELEMENT_OVERHEAD da sie linear mit der Anzahl der in der Karte vorhandenen Elemente wächst. ELEMENT_OVERHEAD wurde als äquivalent zu sizeof(std::_Rb_tree_node_base) da sie bei meinem System einen Wert von 16 hat.

(sizeof(A) + sizeof(B) + ELEMENT_OVERHEAD) * N + CONTAINER_OVERHEAD

-2voto

Cătălin Pitiș Punkte 13785

Die Größe der Karte hängt wirklich von der Implementierung der Karte ab. Auf verschiedenen Compilern/Plattformen kann es unterschiedliche Größen geben, je nachdem, welche STL-Implementierung sie bereitstellen.

Warum brauchen Sie diese Größe?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X