Потребление памяти для повышения ptr_map класса A в качестве ключа и векторов указателей в качестве значения B - PullRequest
0 голосов
/ 23 марта 2012

В качестве дополнительного вопроса к вчерашнему, Потребление памяти указателем на вектор указателей , у меня есть еще один вопрос, касающийся использования памяти для надстройки ptr_map с типом ключа, скажем, классаA (пока предположим, что int), а значение - это (указатель на) вектор указателей некоторого типа (снова предположим, что int), это ptr_map.Я прочитал в вопросе, Как я могу оценить использование памяти std :: map? , что потребление памяти для карт STL обычно

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

Мой вопрос касается того, насколько большим может быть элементнакладные расходы для такой конструкции, в отношении

sizeof(A) + sizeof(B)

Предполагая типы A и B (здесь предполагалось A int, а B указатель на вектор указателей на int), даже ответ для обычного STLкарты могли бы помочь, я полагаю.Кроме того, я хотел бы знать, если это возможно, как / изменится ли ситуация, если A станет более сложным ... Я думаю, что накладные расходы на элементы растут также со сложностью A?Ограничены ли накладные расходы какой-либо частью суммы размеров A и B?Меня беспокоит то, что если накладные расходы составляют большую часть, которая на самом деле не ограничена, весь смысл использования карт больше не выглядит привлекательным.

1 Ответ

1 голос
/ 23 марта 2012

Как сказал Мартиньо Фернандес в комментариях, накладные расходы для каждого элемента карты являются постоянными.

Накладные расходы на элементы карты после изучения некоторых реализаций стандартных библиотек:

  • GCC 4.4.3: 3 указателя и один член типа enum для каждого узла
  • MSVC ++ 2008, MSVC ++ 2010: 3 указателя и 2 символа для каждого узла
  • STLPort 5.2.1: 3 указателя и 1 член bool для каждого узла

GCC 4.4.3, MSVC ++ 2008, MSVC ++ 2010 и STLPort 5.2.1 используют красно-черное дерево для реализации карты.

...