[erlang-questions] map over bitstring
Morten Krogh
mk@REDACTED
Fri Oct 22 16:45:59 CEST 2010
Thanks, Per. That was also the only reason I could see. And it doesn't
really hurt to allocate too much, so it is a good idea.
Morten.
On 10/22/10 4:27 PM, Per Gustafsson wrote:
> The reason for 300 MB is an optimizarion for building binaries which
> allocates extra space for possible future additions to the binary.
>
> Per
>
> 2010/10/22 Morten Krogh <mk@REDACTED <mailto:mk@REDACTED>>
>
> Hi Jesper
>
>
>
> On 10/22/10 2:26 PM, Jesper Louis Andersen wrote:
>
> On Fri, Oct 22, 2010 at 1:15 PM, Morten Krogh<mk@REDACTED
> <mailto:mk@REDACTED>> wrote:
>
> Hi Jesper
>
> Thanks for the link!
>
> It seems to me that the requirement that binaries must be
> contiguous in
> memory is quite strict.
> If that requirement was abandoned, binaries could be lists
> of ProcBins, or
> whatever they are called, instead.
>
> This is essentially iolists you are proposing. They are
> already in the
> language, see
>
> http://prog21.dadgum.com/70.html
>
> for a quick discussion of them.
>
>
> Yes, but my suggestion would let the VM handle lists of binaries
> instead of the application programmer.
> My lists only contain binaries. They are not full iolists, which I
> guess they could be.
>
>
>
> Simple example from my module zip2
>
> [...]
>
> Why is the memory usage 300 MB. It should have been 100MB,
> and in worst
> case, with naive copying, 200MB.
> But 300 MB.
>
> My guess is that B has some excess space allocated for
> appending which
> amount to around 100Mb (you should probably not go with a
> 100Mb binary
> in the first place, but rather an iolist of smaller binaries). B's
> extra space will only get shrunk away when the runtime decide to
> transfer the binary to another process and it is not before it
> is sent
> back to the shell as a message.
>
> My guess might be wrong though.
>
> It is actually 200 MB extra.
>
> Transfering the binaries to the shell, removes 100 MB, so you were
> right. But 200 MB in total is still allocated.
>
> It is still not clear to me. At B = <<A/binary, 97>>, 200 MB is
> allocated behind A? Or somewhere else?
> And after message passing, 200 MB of extra space is shrunk to
> 100MB beyond the 100MB of actual data?
>
> Morten.
>
>
>
>
>
>
>
>
>
>
>
>
> ________________________________________________________________
> erlang-questions (at) erlang.org <http://erlang.org> mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:erlang-questions-unsubscribe@REDACTED
> <mailto:erlang-questions-unsubscribe@REDACTED>
>
>
More information about the erlang-questions
mailing list