[Mono-list] the System.String rewrite
Joe Tennies
joe@fatnsoft.com
22 Feb 2002 14:42:55 -0600
I'd take this if it's still available in a week. I'm a little busy
between now and then.
If someone wants to work on this, go right ahead and take it. There's
plenty to go around ;)
On Fri, 2002-02-22 at 13:13, Paolo Molaro wrote:
> Anyone with lots of spare cycles? Read on.
>
> Basically, a string needs to be represented as a contiguus chunk of
> memory (at the time I proposed this it was for performance/memory usage
> reasons, but it turns out that this is required by the implementation).
>
> The current String.cs code has done his duty, but it's time to replace
> it. It basically needs to go through the same set of changes that I did
> for the array representation a few months ago. I haven't tackled the
> work for string, because its a big task and, after patching it here and
> there, the current code somewhat works.
>
> So, here is how a string appears now (as a C structure):
>
> struct MonoString {
> MonoObject obj;
> int length;
> MonoArray *c_str;
> };
>
> MonoArray is:
> struct MonoArray {
> MonoObject obj;
> int length;
> double data [0];
> }
>
> Note the size of the data array: since arrays are fixed sized, when we
> allocate the object, we also reserve room for length items in the array
> (the type double is used only for alignment reasons).
>
> The string representation needs to become something like:
>
> struct MonoString {
> MonoObject obj;
> int length;
> guint16 chars [0];
> };
>
> This works just as well as for arrays: we allocate the object in one
> chunk (note that strings are immutable, hence fixed size as well).
>
> This also means that the char array is not directly accessible from C#
> and as such, most of String.cs is useless :-(. We need to design the
> interface and have the C# code do argument checking and then call an
> internalcall in the runtime that will do all the work.
> Some code will need to change in the runtime as well, but mostly in
> metadata/object.c.
>
> As you see, it's a big task, I think at least a full week of work,
> but someone will have to do it ;-) The advantage will be: higher speed,
> lower memory usage an eternal glory! (uhm, maybe not:-).
> So, any help with this is appreciated!
>
> Thanks!
>
> lupus
>
> --
> -----------------------------------------------------------------
> lupus@debian.org debian/rules
> lupus@ximian.com Monkeys do it better
>
> _______________________________________________
> Mono-list maillist - Mono-list@ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-list
>