<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Wed, Dec 20, 2017 at 3:52 PM, Roger Lipscombe <span dir="ltr"><<a href="mailto:roger@differentpla.net" target="_blank">roger@differentpla.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class="gmail-">On 20 December 2017 at 14:32, Jan Chochol <<a href="mailto:jan.chochol@gooddata.com">jan.chochol@gooddata.com</a>> wrote:<br>
> Hi,<br>
><br>
> It is possible that these binaries comes as part of larger binaries (also<br>
> called sub binaries).<br>
<br>
</span>Is there any way to figure this out in gdb?<br></blockquote><div><br></div><div>You have to check the size in the ProcBin vs the size of the Binary. The Binary is what is pointed to by the second to last pointer value in the dump.</div><div><br></div><div>eg:</div><div><br></div><div><div>(gdb) etp-offheapdump ((Process*)0x7fffb53852d8)->off_heap.first</div><div>warning: Expression is not an assignment (and might have no effect)</div><div>% Offheap dump:</div><div>[#RefcBinary<0x3,0x7fffb1cc2460,0x7fffb1841aa8,0x7fffb1841ac0,(nil)>,</div><div> #RefcBinary<0x1f,(nil),0x7fffb1841618,0x7fffb1841630,(nil)>].</div><div>(gdb) p *((Binary*)0x7fffb1841aa8)<br></div></div><div>$1 = {intern = {flags = 0, refc = {counter = 1}}, orig_size = 3, orig_bytes = "1"}<br></div><div><br></div><div>and yes, that size can be smaller than 64 bytes. These < 64 byte binaries are created by the runtime when it needs a binaries that a GC will not move for whatever reason. One such example would be unicode:characters_to_binary/2, which is the reason why the example above only has a 3 byte refc. I'm sure there are others as well. I'm not sure if I consider this a bug or not, but it's definitely not optimal behavior.</div><div><br></div><div>Lukas</div></div></div></div>