Я хотел бы найти размер boost :: unordered_map, который у меня есть, который содержит указатель на класс, сопоставленный std :: string. Я делаю sizeof (unordered_map var). Это правильно? Это даст мне место, которое он занимает? Включая содержание дома занимает? Хотел измерить его, чтобы сравнить с std :: map, который будет содержать те же данные, которые я также измерял бы по sizeof (std :: map var). Я хотел бы знать, как решить, сколько места занимает каждый из них, и какую альтернативу лучше выбрать, сравнивая скорость и пространство.
Пожалуйста, дайте мне знать, если мой способ расчета размеров правильный и даст мне фактические / правильные размеры и поможет мне принять правильное решение.
Изменить 1:
Если мой способ получить размер неверен, пожалуйста, дайте мне знать способы получения правильного размера (включая домашнее хозяйство)
ТИА
-р
sizeof()
Оператор возвращает только размер объекта, но не пространство, которое он занимает в куче (динамически выделяемая память). Поскольку карты и строки могут очень хорошо распределять память в куче, это вам не поможет.
Нет простого способа измерить общий объем памяти определенных частей вашей программы. Однако это не невозможно. Один из вариантов — использовать пользовательский распределитель, который записывает распределение памяти и который вы используете для всех объектов, связанных с объектами, которые вы хотите измерить (для карты и ее объектов, включая строки).
Вы просто не сможете точно рассчитать количество места, используемого вашей картой. Есть типы и пространство, к которым у вас нет доступа.
Что вы должны сделать, это задать совершенно другой вопрос, касающийся проблемы, которую вы пытаетесь решить, где вы считаете это необходимым.