Am Freitag, 28. November 2003 12:10 schrieb Koen Claessen: > Wolfgang Jeltsch wrote: > | > 1. Today I spend a few hours trying to track down a memory leak. It > | > turns out I just didn't realize how much space a string takes up. > | > On my machine "replicate 5000000 'a'" will use 90MB of space! > | > | You have to take into account that Chars (in GHC) take 4 > | bytes of memory because they denote Unicode codepoints. > | 5,000,000 times 4 bytes is already 20 MB. (The rest is > | only a constant factor. ;-)) > > You have to realize that the space usage does not > (necessarily) come from duplicating the character 'a'. > In a lazy implementation, the representation of that > character will be shared by all elements in the list. > > So, what is happening that there is 1 cell in the heap > containing the representation of 'a', and then a linked list > of length 5000000, where each element points to that cell.
Yes, you're right. But if you choose the array alternative, you cannot use sharing and would, therefore, still need 20 MB. > Just my 2 �re. > > /Koen Wolfgang _______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
