Size: a a a

2020 July 23

v

vkCreateInstance in CODE BLOG / C#
SeanWoo
Аппенды эти, тустринги не удобны
А чем заменить Append? Оператором +?

ToString надо же всего один раз вызывать, так что достаточно удобно
источник

S

SeanWoo in CODE BLOG / C#
vkCreateInstance
А чем заменить Append? Оператором +?

ToString надо же всего один раз вызывать, так что достаточно удобно
Да, плюсом
источник

v

vkCreateInstance in CODE BLOG / C#
SeanWoo
Да, плюсом
Пусть этот новый тип называется NewString, его отличие в том что операция + не создаёт новую строку, а переиспользует старый буффер одного из операндов. Получается что операция + будет изменять один из операндов, а это не интуитивное поведение

NewString a = "aaa";
NewString b = "bbb";
NewString c = a + b;

после этого
a будет равно "aaabbb"
b будет равное "bbb"
c будет равно "aaabbb"

потому что для новой строки тип NewString использовал старый буффер
источник

SB

Sergey Benzenko in CODE BLOG / C#
vkCreateInstance
Пусть этот новый тип называется NewString, его отличие в том что операция + не создаёт новую строку, а переиспользует старый буффер одного из операндов. Получается что операция + будет изменять один из операндов, а это не интуитивное поведение

NewString a = "aaa";
NewString b = "bbb";
NewString c = a + b;

после этого
a будет равно "aaabbb"
b будет равное "bbb"
c будет равно "aaabbb"

потому что для новой строки тип NewString использовал старый буффер
А как вы так хитро размер одного из буферов увеличите?
источник

S

SeanWoo in CODE BLOG / C#
vkCreateInstance
Пусть этот новый тип называется NewString, его отличие в том что операция + не создаёт новую строку, а переиспользует старый буффер одного из операндов. Получается что операция + будет изменять один из операндов, а это не интуитивное поведение

NewString a = "aaa";
NewString b = "bbb";
NewString c = a + b;

после этого
a будет равно "aaabbb"
b будет равное "bbb"
c будет равно "aaabbb"

потому что для новой строки тип NewString использовал старый буффер
Кстати да
источник

S

SeanWoo in CODE BLOG / C#
Идея получается шляпа
источник

S

SeanWoo in CODE BLOG / C#
😁
источник

SB

Sergey Benzenko in CODE BLOG / C#
Есть подозрение, что мелкомягкие не идиоты)))
источник

S

SeanWoo in CODE BLOG / C#
Sergey Benzenko
А как вы так хитро размер одного из буферов увеличите?
Выделять память с запасом
источник

SB

Sergey Benzenko in CODE BLOG / C#
SeanWoo
Выделять память с запасом
ну узбекаф)))
источник

S

SeanWoo in CODE BLOG / C#
Тут правда минус, строки тяжелые будут)
источник

v

vkCreateInstance in CODE BLOG / C#
Sergey Benzenko
А как вы так хитро размер одного из буферов увеличите?
Переаллокация буффера. Это не тоже самое что выделить новый буффер большего размера если что так как можно выделить с запасом и тогда удлиннение строки не будет требовать перемещения в другую область памяти)

В общем так же как List<T>, при его расширении не обязательно происходит выделение нового массива элементов, иногда он уже заранее выделен достаточно большой
источник

SB

Sergey Benzenko in CODE BLOG / C#
vkCreateInstance
Переаллокация буффера. Это не тоже самое что выделить новый буффер большего размера если что так как можно выделить с запасом и тогда удлиннение строки не будет требовать перемещения в другую область памяти)

В общем так же как List<T>, при его расширении не обязательно происходит выделение нового массива элементов, иногда он уже заранее выделен достаточно большой
Собственно, так же, как StringBuilder?
источник

v

vkCreateInstance in CODE BLOG / C#
Sergey Benzenko
Собственно, так же, как StringBuilder?
да
источник

v

vkCreateInstance in CODE BLOG / C#
Моя задача была показать почему оператор + должен создавать новый буффер а не расширять один из аргументов
источник

S

SeanWoo in CODE BLOG / C#
vkCreateInstance
Моя задача была показать почему оператор + должен создавать новый буффер а не расширять один из аргументов
Ты успешно справился
источник

v

vkCreateInstance in CODE BLOG / C#
SeanWoo
Аппенды эти, тустринги не удобны
Вообще в C++ тип string это аналог StringBuilder, то есть строки в C++ можно расширять, укорачивать при этом возможно без переаллокации)

Наверняка есть причины по которым в C# нельзя изменять размер строки, надо бы погуглить
источник

S

SeanWoo in CODE BLOG / C#
vkCreateInstance
Моя задача была показать почему оператор + должен создавать новый буффер а не расширять один из аргументов
Ты еще случаем не знаешь куда надо сувать ассемблерный код в PE файл от дотнета. В секции кода(.text) первым идёт хейдер Cor20(CLR), а затем чистый IL код
источник

S

SeanWoo in CODE BLOG / C#
SeanWoo
Ты еще случаем не знаешь куда надо сувать ассемблерный код в PE файл от дотнета. В секции кода(.text) первым идёт хейдер Cor20(CLR), а затем чистый IL код
Я вот думаю засунуть до Cor20
источник

S

SeanWoo in CODE BLOG / C#
Надо тестить
источник