[Haskell-cafe] Re: Space and time leaks
Aaron Denney
wnoise at ofb.net
Thu Oct 4 07:43:00 EDT 2007
On 2007-10-04, Ronald Guida <ronguida at mindspring.com> wrote:
> I need some help with space and time leaks.
>
> I know of two types of space leak. The first type of leak occurs when
> a function uses unnecessary stack or heap space.
>
> GHCi> sum [1..10^6]
> *** Exception: stack overflow
>
> Apparently, the default definition for "sum" has a space leak.
> I can define my own sum in terms of strict foldl ...
>
> > sum' xs = foldl' (+) 0 xs
>
> ... and it doesn't overflow the stack.
>
> GHCi> sum' [1..10^6]
> 500000500000
> (0.27 secs, 112403416 bytes)
>
> GHCi> sum' [1..10^7]
> 50000005000000
> (2.73 secs, 1161223384 bytes)
>
> GHCi> sum' [1..10^8]
> 5000000050000000
> (27.83 secs, 11645261144 bytes)
>
> I think there's still a space leak; I don't understand why GHCi using
> 10^8, 10^9, 10^10 bytes of memory for these calculations.
This isn't a space leak. The memory reported is the total amount of
allocation done, not the most used at a given time. A C program that
did "x = malloc(20); free(x); x = malloc(20); free(x);" would be
reporting 40. The run-time system is essentially constructing all of
these Integers (and functions returning them) at one point or another,
and these need to be represented.
Compare with "last" on these structures:
Prelude> last [1..10^6]
1000000
(0.06 secs, 40895096 bytes)
Prelude> last [1..10^7]
10000000
(0.50 secs, 402118492 bytes)
Prelude> last [1..10^8]
100000000
(4.74 secs, 4016449660 bytes)
--
Aaron Denney
-><-
More information about the Haskell-Cafe
mailing list