perl 如何释放内存

perl 如何释放内存,第1张

perl有垃空宽圾回收机制,不过采用的是一种简单的算法--引用计数,当某变量的引用数为0时会自动释放。

至于手动释搭孝放内存,严格来讲,perl里并不存在这样的function. 不过可以“近似地”做到。

undef %hash

undef @array

或者:

%hash = ()

@array = ()

perl的undef()函数有两个功能: 清除变量的内容,释放变量所占的buffers, 此时你可以近似地认为已经释放了内存。

但是注意,实际上并没有真正地释放内存。如果你了解perl的变量在内存里的存放结构,你就会发现,undef后,原变量所在的内存还是被占用的,任然保持着被分配时的状态。知亏稿但是这块内存的状态被的标记被“reusable”, 当所有内存皆被用完,超出阈值时,这块"被标记"的且它的"引用数为0"的内存才会被释放。

perl的缺笑滑模点在于正是让裂因为Perl的灵活性和“过度”的冗余语法,因此获得了仅写的“美誉”,因为Perl程序可以写得很随意(例如,变量不经声明就可以直接使用),但是可能少写一些字母碰缓就会得到意想不到的结果(而不报错),许多Perl程序的代码令人难以阅读,实现相同功能的程序代码长度可以相差十倍百倍,这就令程序的维护者(甚至是编写者)难以维护。

同样的,因为Perl这样随意的特点,可能会导致一些Perl程序员遗忘语法,以至于不得不经常查看Perl手册。对此,《Learning Perl》一书里建议经常使用Perl编程。

建议的解决方法是在程序里使用use strict以及use warnings,并统一代码风格,使用库,而不是自己使用“硬编码”。Perl同样可以将代码书写得像Python或Ruby等语言一样优雅。

    这段时间因为一些不可描述的文章被整顿了,所以没有做搜神学习笔记。加上最近开学,乱七八糟的事情很多,目测要下个礼拜开始上课才能够回归正轨。

    最近做了一个事情就是,注释出来的初始基因组pep文件会存在许多个转录本,很多冗余的氨基酸序列,我们需要去除这些冗余,取最长的那个转录本。

    对于序列只有一行的很容易可以用 grep 办到,但是还是那个问题,fasta格式存在自动换行问题,所以我们最好还是写脚本提取最长转录本比较稳妥,这里分享一下所用的脚本。

    原数册粗据格式基本如下:

    我写的Perl脚本修改了原文件格式和顺序(哈希表的 sort 真是个谜),以后有时间我会考虑一下世姿亏如何保留所有原格式输出,暂时将就着用吧。

    另外同学依据我的需求也写了一个对应功能的Python脚本,不得不承认Python v3.0的字典在保留原顺序输出方面的能力就很强,这个脚本几乎对原文件没有改动,很实用。有时间的话会对它进行全方位的注释学习,希望自己能在Python脚本书写能力上有所进步【狗头苦笑】!


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8284992.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-15
下一篇2023-04-15

发表评论

登录后才能评论

评论列表(0条)

    保存