一个问题,请问您是怎样打开一个大文件的。我打开一个2.4G大小的基因组文件会报错: panic: realloc at ChrY-0.2-bit.pl line 23, <FA> line 42954286. 好象是什么"堆溢出的恐慌"。。。怎么会这样呢? //bow
On 9月24日, 上午11时02分, agentzh <[email protected]> wrote: > 2009/9/23 空格 <[email protected]> > > > 从一个基因组中取了50M大小的一段序列测试了一下,比较成功。top显示的结果如下: > > Yay! 我刚刚又对 appears 进行了一些改进,现发布 v0.02: > > http://github.com/agentzh/appears/downloads > > 主要改动如下: > > 1. 代码命名调整:使用 token 来表示核苷,而非有歧议的 char 这个术语 > 2. 在代码中进一步去除"神秘的数" > 3. 按 gcc 要求启用 large file 支持(原先的 v0.01 在 Linux 上读取 4 GB 的文件会报错: "Value too > large for defined data type") > 4. 添加了 t/gensample.pl 和 t/gensample.c 这两个程序,用来生成指定大小的随机序列文件(默认为 4.8 G)。 > > gensample.pl 和 gensample.c 的功能相同,但性能有明显差别:Perl 实现大约 1 秒生成 1 MB 的序列,而后者,即 C > 实现, 1 秒大约生成 20 MB 的序列。 > > 我使用 gensample.c 程序生成了一个 4 GB 大小的随机序列文件,其输出如下: > > $ time t/gensample > samples/big.txt > real 2m25.392s > user 2m11.432s > sys 0m6.148s > > $ ls -lh samples/big.txt > -rw-r--r-- 1 agentz agentz 4.0G 2009-09-24 10:20 samples/big.txt > > $ time ./appears samples/big.txt > /tmp/out.txt > INFO: Reading file samples/big.txt... > INFO: Using a bit array of length 1073741824 (sequence length: 15). > INFO: Searching missing combinations of sequences... > > real 7m36.456s > user 6m59.882s > sys 0m9.977s > > 在我的 Core2Duo T9600, SATA 7600rpm disk 的本本上,*一共只需要 7 分半钟*的时间,呵呵。 > > 可以看到,appears占用了2G的内存的6.5%,正好是大约130M。和几位大大估算的非常一致。因为程序是把结果打印到屏幕的,所以> > konsle有占用很多的cpu资源。 > > 结果最好重定向到磁盘文件,就像上面所演示的那样,呵呵。 > > Cheers, > -agentzh --~--~---------~--~----~------------~-------~--~----~ 您收到此信息是由于您订阅了 Google 论坛“PerlChina Mongers 讨论组”论坛。 要在此论坛发帖,请发电子邮件到 [email protected] 要退订此论坛,请发邮件至 [email protected] 更多选项,请通过 http://groups.google.com/group/perlchina?hl=zh-CN 访问该论坛 -~----------~----~----~----~------~----~------~--~---
