# [erlang-questions] Measuring GC pressure and memory efficiency

Joel Reymont joelr1@REDACTED
Fri Dec 14 12:37:50 CET 2007

```I would like to measure the memory efficiency of the following module.
I suppose this would tell me how much pressure it puts on the GC,
except it may not because it uses binaries.

How do I measure the amount of temporary binaries each function
generates as well as the total amount of garbage?

Thanks, Joel

P.S. This is code written by Julian Fondren for this thread:

http://erlang.org/pipermail/erlang-questions/2006-December/024591.html

---

-module(arrays).

-export([new/1, new/2, new/3, get/2, put/3, size/1, elt_width/1]).

new(Size) ->
new(Size,0,32).

new(Size,Init) ->
new(Size,Init,32).

new(Size,Init,Width) when Size > 0, Width > 8, Width rem 8 == 0 ->
new(Size,Init,Width,<<>>).

new(0,_,W,B) ->
<<W:32, B/binary>>;

new(N,I,W,B) ->
new(N-1,I,W,<<I:W, B/binary>>).

get(N,<<W:32,B/binary>>) when N > 0 ->
Before = W * (N - 1),
<<_:Before, X:W,
_/binary>> = B, X.

put(N,X,<<W:32,B/binary>>) when N > 0 ->
Before = W * (N - 1),
<<Bef:Before, _:W, After/binary>> = B,
<<W:32, Bef:Before, X:W, After/binary>>.

size(<<W:32, B/binary>>) ->
erlang:size(B) div (W div 8).

elt_width(<<W:32, _/binary>>) ->
W.

--
http://wagerlabs.com

```