【发布时间】:2014-08-13 11:55:00
【问题描述】:
我正在尝试将 1.4 亿位的二进制向量解压缩到列表中。 我正在检查这个函数的内存使用情况,但它看起来很奇怪。内存使用量上升到 35GB(GB 而不是 MB)。如何减少内存使用量?
sub bin2list {
# This sub translates a binary vector to a list of "1","0"
my $vector = shift;
my @unpacked = split //, (unpack "B*", $vector );
return @unpacked;
}
【问题讨论】:
-
Perl 标量需要several bytes。为什么需要解包向量?
-
我说的是 35GB,几个字节不算什么。我需要它有几个原因,但我无法更改它。对我来说主要问题是“@unpacked”数组的大小!
-
你在函数的第一行复制。 2日复制。回本。它的高级代码效率极低,因此内存使用是成本。描述您无法更改的确切内容,我们可能会找到解决方法。
-
我需要“0”和“1”数组中的二进制文件。我不能返回值。我不能说 $vector 大小约为 600MB(没关系),并且在运行此行“my @unpacked = split //, (unpack "B*", $vector );" 时,内存使用量增加到 35GB。我需要减少这个。
-
illguts 有关于标量格式的信息。