Как устроен 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());
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д