Я использую библиотека точных комплексных чисел (zkcm) и хочу сравнить некоторые результаты, используя complex<double>
,
В какой-то момент я пытаюсь перепроверить память переменных, используя sizeof()
но я получаю один и тот же ответ (32) независимо от того, насколько большой памяти я выделяю переменные; т.е. следующий фрагмент печатает 32 независимо от того, что я использую внутри zkcm_set_default_prec()
:
zkcm_set_default_prec(128);
zkcm_class z;
cout << sizeof(z) << endl;
Есть ли другой способ, чем sizeof()
получить объем памяти переменной?
Я не могу это проверить, и документация немного расплывчато, но есть метод с такой подписью:
int zkcm class::get_prec ( void ) const;
Который описан так:
Получите внутреннюю точность объекта, а именно точность, используемую для каждой части «этого» комплексного числа
Это может вернуть количество цифр, которое должно быть пропорционально количеству используемой памяти. Конечно, точное отношение — это деталь реализации. Сам класс, вероятно, просто содержит указатель на выделенный в куче буфер, в котором находятся цифры, и некоторую бухгалтерскую информацию. sizeof
Оператор (в C ++) полностью статичен, т.е. оценивается во время компиляции.
В какой-то момент я пытаюсь перепроверить память переменных с помощью sizeof (), но я получаю один и тот же ответ (32), независимо от того, насколько большой памяти я выделяю переменные
sizeof()
оценивается во время компиляции, и в языке C ++ нет способа изменить это значение во время выполнения, точка. Может быть какой-то интерфейс, который предоставляет необходимую вам информацию (прямо или косвенно), а может и нет. Но sizeof()
безусловно, это не способ достичь того, что вы хотите.