Поскольку это полностью детали реализации, вы не можете определить это с точностью 100%
.
Однако, как вы сказали, вы хотите поместить некоторый код в статистику использования памяти в вашей программе, тогда вы можете сделать это с некоторой точностью.
Я полагаю, что для std::string
размер памяти, занятой строковыми объектами, будет почти равным:
size_t statisticalSizeStr = sizeof(string)+ s.capacity() * sizeof(char);
И аналогично, для std::vector
size_t statisticalSizeVec = sizeof(std::vector<T>)+ ....;
Вы можете смоделировать свою статистическую оценку по такой информации. Для вектора вы также можете рассмотреть размер T
таким же образом, который заполнит ....
в приведенном выше уравнении. Например, если T
равно std::string
, то:
size_t vecSize = sizeof(std::vector<std::string>);
size_t statisticalSizeVec = vecSize + v.capacity() * statisticalSizeStr;
А если T
равно int
, то
size_t statisticalSizeVec=sizeof(std::vector<int>)+v.capacity()*sizeof(int);
Надеюсь, такой анализ поможет вам рассчитать размер с максимально возможной точностью.