[prev in list] [next in list] [prev in thread] [next in thread]
List: lua-l
Subject: Re: suggestion: table.remove and non-integer keys
From: Ulrich Schmidt <u.sch.zw () gmx ! de>
Date: 2015-08-25 17:38:17
Message-ID: 55DCA809.10205 () gmx ! de
[Download RAW message or body]
Am 25.08.2015 um 19:33 schrieb Tim Hill:
>
> > Ok now i am completely confused. After reading your linked source i
> > am back at my starting point, asuming the only value assigned by
> > reference is a table/list. All other are assinged by value. So a
> > _stringvar1= stringvar2_ creates a copy of the source string. (still
> > assuming we are talking about strings of size 1kB+ as in my program.)
> > Ulrich.
> To clarify…
>
> Strings are immutable. When you "copy" a string in Lua, you merely copy a reference \
> to that existing string, so the overhead in both speed and size is small and \
> (nearly) constant. You can easily try this for yourself with a simple Lua programs \
> that makes lots of copies of a big string into (say) a Lua array. This cheap copy \
> also applies to passing strings as arguments, so you also get low-cost function \
> calls when using long string arguments.
> When you create a NEW string (for example, by concatenating two existing strings), \
> then Lua does indeed need to make a copy of the actual string data to create that \
> new string. However, for stings below a certain size threshold, Lua attempts to \
> "intern" the newly created string. That is, it checks to see if an existing \
> identical string already exists, and, if it does, replaces that newly created \
> string with another reference to the (already interned) string. The threshold for \
> this interning process is set at compile time, and by default is 40 bytes. The \
> rational here is that the probability of two big strings being the same rapidly \
> diminishes as size increases, so at a certain threshold the space savings is offset \
> by the extra overhead of the interning process. Again, you can demonstrate this for \
> yourself; try creating an array using a loop that concatenates two strings \
> repeatedly; if the new string is below the threshold, Lua will intern it and you \
> will see very little memory overhead. if the string is above the threshold, Lua \
> will consume additional memory for each new copy.
> HTH
>
> —Tim
>
>
Ok its clear now. Thanks a lot.
Ulrich.
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic