Как устроен System.String ? - C#
Формулировка задачи:
Всем привет.
Подскажите что почитать про System.String. Статьи или книги где есть подробное описание.
Конкретно интересует устройство внутреннего буфера, который собственно хранит символы.
Буфер представлен не в виде явного массива или связного списка.
Если смотреть исходный код System.String, можно увидеть поле
private char m_firstChar;
Получить символы System.String можно по адресу этого поля.
Например, копия строки:
Значит, при создании объекта System.String по адресу
поля m_firstChar
пишется массив символов ( или что-то) .
Удивляет, что при этом нет реализации интерфейса IDisposable ...
Как конкретно создаётся строка посмотреть нельзя,
метод string.FastAllocateString(length); написан не на C#.
Что бы почитать в этом направлении?
string text = string.FastAllocateString(length);
fixed (char* ptr = &text.m_firstChar)
{
fixed (char* ptr2 = &str.m_firstChar)
{
string.wstrcpy(ptr, ptr2, length);
}
}
return text;Решение задачи: «Как устроен System.String ?»
textual
Листинг программы
class Test
{
const int SIZE = 256;
private char ch;
private FixedBufferStruct fixedBufferStruct;
unsafe struct FixedBufferStruct
{
public fixed char buffer[SIZE];
}
public unsafe Test(string s)
{
fixed (char* pch = &this.ch)
{
fixed (char* buffer = fixedBufferStruct.buffer)
{
Buffer.MemoryCopy(buffer, pch, SIZE, SIZE);
}
}
fixed (char* p = &this.ch)
{
for (int i = 0; i < s.Length; i++)
{
*(p + i) = s[i];
}
}
}
public unsafe override string ToString()
{
fixed (char* p = &this.ch)
{
return new string(p);
}
}
}
static void Main(string[] args)
{
Test test = new Test("Hello World!!!");
Console.WriteLine(test.ToString());