Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Объём памяти занимаемый переменной


Автор: Secandr 27.3.2015, 17:39
Привет.

А есть более менее простой способ узнать сколько памяти занимает переменная? Хотя бы ориентировочно.

Я для общения потомков с предком использую разделяемую память на стареньком сервере и мне периодически не хватает памяти для обмена данными. Хотелось бы предвидеть такой момент и не передавать кусок данных, если он больше определённого размера.

Автор: arto 27.3.2015, 17:46
а как переменные передаются?
и какие переменные?

Автор: Secandr 30.3.2015, 14:52
Вот как-то так:

Код

use IPC::Shareable;
my %buffer;
my $handle = tie %buffer, 'IPC::Shareable', undef, { destroy => 1 };



В детях делаю так:

Код

              $handle->shlock();
              $buffer{out} .="\nend $id at ".localtime()."\n";
              $buffer{out_reconfig}=Dumper($o{reconfig}) if exists $o{reconfig};
              push @{$buffer{error}}, keys %{$o{error}} if exists $o{error};
              $buffer{out_error}=Dumper($o{error}) if exists $o{error};
              foreach (keys %WARNING) {
                $buffer{'WARNING'}{$_}=1;
              }  
              $handle->shunlock();


В принципе можно оценить количество ключей в $o{error} и если их больше N не запоминать данные, тем более они нужны больше для дебага.

Автор: arto 31.3.2015, 08:32
да, у вас размер хеша определяется в основном размером ключей и значений.

Автор: noize 31.3.2015, 12:02
попробуйте https://metacpan.org/pod/Devel::Peek, не уверен, что это именно то, что нужно, но можно протестить

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)