<p dir="ltr">As far as I recall, guards aren't handled cleverly - common parts do not result in shared code.</p>
<p dir="ltr">Regarding GC: Variables are on the stack and are released as soon as their lifetime is done, so any extra GC-effect caused by the heap growing into the stack sooner would presumably be small except if the variable in question had a lifetime across a recursive call. I guess you'd have to measure...</p>

<div class="gmail_quote">Den 26/02/2014 13.42 skrev "Loïc Hoguin" <<a href="mailto:essen@ninenines.eu">essen@ninenines.eu</a>>:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Thanks.<br>
<br>
Is there any optimization when it's done inside a function clause guard? For example say, 5 of my 6 clauses need to check byte_size(Bin) to decide what to do. I am reading some code I wrote a few days ago and I see I instinctively used a single clause, creating a variable to hold the size and then used a if inside it. Perhaps the compiler is doing something about it in this case?<br>

<br>
I know it doesn't matter 99% of the time, but I got one or two modules that deal with binaries where the smallest improvement means I can handle a bunch more traffic. To be honest it would be really nice if the compiler would automatically create a variable when it sees me use byte_size/1 more than once as I can then stop writing all this extra code. And I'm guessing it could probably do the same with length/1 and others.<br>

<br>
On 02/26/2014 12:46 PM, Björn Gustavsson wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Tue, Feb 25, 2014 at 10:56 PM, Loïc Hoguin <<a href="mailto:essen@ninenines.eu" target="_blank">essen@ninenines.eu</a>> wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
But considering byte_size/1 is O(1) I am wondering if perhaps that's a<br>
little pointless. Is it even worth creating a variable for this? Is perhaps<br>
the variable optimized out? Perhaps accessing a variable contents and<br>
calling byte_size/1 are equivalent operations? Or the GC that will follow is<br>
not worth what little is saved by creating a variable in the first place?<br>
<br>
If someone could shed some light on this perhaps I could stop creating<br>
variables like this and simplify my code a little more.<br>
<br>
</blockquote>
<br>
There is definitely more overhead calling a BIF than accessing a variable.<br>
<br>
That said, I doubt that you will be able to notice the difference in a<br>
real program.<br>
So I suggest that you write in the way that you find most readable.<br>
<br>
/Bjorn<br>
<br>
</blockquote>
<br>
-- <br>
Loïc Hoguin<br>
<a href="http://ninenines.eu" target="_blank">http://ninenines.eu</a><br>
______________________________<u></u>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/<u></u>listinfo/erlang-questions</a><br>
</blockquote></div>