SPUG: general hash performance questions
Benjamin Franks
benjamin at dzhan.com
Wed Feb 27 17:25:14 CST 2002
I was just messing about with some test code to gauge execution times and
came up with 2 general questions:
(1) While iterating over the keys of a large hash, I notice speed
increase if I do the following:
foreach (keys %hash) {
$hash{$_}++;
}
instead of doing:
foreach (keys %hash) {
if (exists $hash{$_}) {$hash{$_}++;}
else {$hash{$_}=1;}
}
This intuitively makes sense because I'm cutting out the conditional
statement and test for existence. But why does it work? If I increment a
non-existent hash/key value, how does it get to (correctly) 1?
(2) Let's say I build a hash of 1 million keys, each having a value of 1.
foreach (1..1000000) {
$hash{$_}=1;
}
If I watch the memory consumption with "top," I can see the memory footprint grow pretty big.
However, if I make a complex data structure of hashes like:
foreach $a (1..100) {
foreach $b (1..100) {
foreach $c (1..100) {
$hash{$a}{$b}{$c}=1;
...
, I don't see the memory footprint grow nearly as large as for simpler
case. Why is this? I understand "top" is probably not the greatest tool
for this; can anyone recommend better perl memory profiling tools?
(3) And even though this is a perl list, can complex structures like hash
tables of hash tables be done in C? Any sample code sources?
Thanks,
--Ben
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
POST TO: spug-list at pm.org PROBLEMS: owner-spug-list at pm.org
Subscriptions; Email to majordomo at pm.org: ACTION LIST EMAIL
Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
For daily traffic, use spug-list for LIST ; for weekly, spug-list-digest
Seattle Perl Users Group (SPUG) Home Page: http://seattleperl.org
More information about the spug-list
mailing list