Существует простой C++ классИспользование SizeOf для классов
class LASet
{
public:
long int maxValue, minValue;
int _count;
set <long int> _mySet;
LASet()
{
maxValue = 0;
_count = 0;
minValue =std::numeric_limits<long int>::max();
_mySet.clear();
}
void Add(long int value)
{
if (_mySet.find(value) != _mySet.end())
return;
if (value > maxValue)
maxValue = value;
if (value < minValue)
minValue = value;
_mySet.insert(value);
_count++;
}
// some helper functions....
};
Как я инстанцирует некоторые объекты этого класса, я хочу, чтобы найти их размеры во время выполнения. Итак, я просто написал sizeof
после многих циклов выполнения для каждого объекта. Например:
LASet LBAStartSet;
...
...
cout << "sizeof LBAStartSet = " << sizeof(LBAStartSet) << '\n';
Это cout
линия отчеты только 72
для всех объектов означает 72В, но top
команда показывает 15 Гб памяти.
Я прочитал руководство по адресу cppreference, что sizeof
не работает над некоторыми неполными типами данных. Является ли мой тип данных неполным?
Любая обратная связь приветствуется.
'sizeof' не делает то, что вы думаете, что он делает ... перечитайте эту страницу руководства. Ваш тип не является неполным –
Чтобы помочь вам понять, помните, что 'sizeof' разрешен во время компиляции –
sizeof() - это оператор времени компиляции. Ваш тип завершен. Как я вижу из вашего кода, который вы использовали «set», и если я не ошибаюсь, вы добавляете данные в этот набор во время выполнения. Sizeof() не вернет вам размер во время выполнения, он даст размер вашего класса, вычисляя типы элементов данных во время компиляции. top покажет вам фактическое использование памяти во время работы (резидентная память). – sagar