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
4 Stimmen
Nur um das klarzustellen, es ist
std::map<A, B>
richtig?