2014-02-14 5 views
3

Я использую библиотеку комплексных номеров с несколькими значениями (zkcm) и хочу сравнить некоторые результаты, используя complex<double>.Многоуровневая библиотека zkcm и sizeof()

В какой-то момент я пытаюсь дважды проверить память переменных с помощью sizeof(), но я получаю тот же ответ (32) независимо от того, насколько большой объем памяти я выделяю переменным; то есть следующий фрагмент печатает 32 независимо от того, что я использую в zkcm_set_default_prec():

zkcm_set_default_prec(128); 
zkcm_class z; 
cout << sizeof(z) << endl; 

Есть еще один способ, чем sizeof(), чтобы получить размер памяти переменной?

ответ

1

я не могу проверить его, и the documentation немного расплывчато, но есть метод с этой подписью:

int zkcm class::get_prec (void) const; 

который описывается следующим образом:

Получить внутреннюю точность объект, а именно точность, используемую для каждой части «этого» комплексного номера

Это может вернуть количество цифр, которое должно быть пропорциональным в зависимости от объема используемой памяти. Конечно, точное отношение - это детализация реализации. Сам класс, вероятно, просто содержит указатель на буфер, выделенный в кучу, где находятся цифры и какая-то информация о бухгалтерском учете. Оператор sizeof (на C++) полностью статичен, то есть оценивается во время компиляции.

1

В один момент я стараюсь перепроверить память переменных с использованием SizeOf(), но я получаю тот же ответ (32), независимо от того, насколько большой памяти я выделить переменные

sizeof() оценивается во время компиляции, и на языке C++ нет способа изменить это значение во время выполнения, период. Может быть какой-то интерфейс, который предоставляет необходимую вам информацию (прямо или косвенно), может и не быть. Но sizeof() определенно не способ добиться того, чего вы хотите.

+0

sizeof возвращает размер самого объекта. Если этот объект имеет данные, выделенные через new() или malloc(), тогда sizeof не учитывает выделенные данные, а только размер указателя на выделенные данные. Точно так же, как sizeof (char *) возвращает размер самого указателя, а не размер выделенных данных. – gnasher729