- 论坛徽章:
- 11
|
本帖最后由 timespace 于 2014-05-24 11:52 编辑
回复 20# MMMIX
是不太科学,从现在的结果也不足以倒推出原因。。。
从Perl官网找到一封1998年的C数据结构文档http://blob.perl.org/tpc/1998/Pe ... Perl%20Illustrated/,如今HASH函数可能不同,但基础数据结构应该还有参考价值,其中hash的实现:
![]()
考虑64位系统,load factor(元素个数/buckets)小于1,还没算上hash key字符串内容:- #!/usr/bin/perl
- use strict;
- use warnings;
- # SvNULL (ANY, REFCNT, FLAGS & Type)
- my $SvNULL_size = 8*3;
- # SvPV (SvNULL, PVX, CUR, LEN)
- my $SvPV_size = $SvNULL_size + 8*3;
- # SvIV (SvNULL, IVX/NVX)
- my $SvIV_size = $SvNULL_size + 8;
- # HE (next, hek, val)
- my $bucket_size = 8;
- my $entry_size = 8*3 + 8*2 + $SvIV_size + $bucket_size;
- # HV
- my $entrys = 150e6;
- my $HV_size_min = $entrys * $entry_size;
- printf "hash size %.2f GB\n", $HV_size_min/2**30;
复制代码 输出:- $ ./hash_storage.pl
- hash size 11.18 GB
复制代码 在加上原始字符串的2.5GB,那就是13.68GB,基本就是最保守的内存估计了,不过距离真实的19GB+还有不少空白。
|
|