Re[15]: Об эффективности программ
От: Pavel Dvorkin Россия  
Дата: 12.10.05 04:26
Оценка:
Здравствуйте, GlebZ, Вы писали:

PD>>Хуже. Она использует __declspec(thread). Иначе, сам подумай, что будет, если ее начнут из разных потоков вызывать

GZ>Для этого достаточно одного потока.

Только при некорректном использовании.

GZ>Честно говоря, аналогом можно считать больше wstring чем char*. Char* — это область памяти с которой можно сильно сглюкавить


или сделать что-то очень эффективно. Вообще возможность сделать что-то эффективно всегда связана с большей возможностью сглюкавить. Крайний пример такого утверждения — ассемблер.



GZ>
GZ>if (bla-bla)
GZ>   strupr(lpStr);
GZ>


Да. Классический вариант inplace обработки.


GZ>То есть, не обязательно строка будет изменена. А защищать ее как-то уже надо. В Net над таким задумываться не надо. Поскольку это не value объект, он всегда передается по ссылке. А возвращаться может только в виде другой строки(или другой ссылки, если строка не изменилась).


Вообще-то идея string как неизменяемого объекта в NET мне нп\равится (правда, идея не Net, а Java принадлежит, а может, и кому-то до нее — не знаю). Разумеется, при наличии еще и StringBuilder.



GZ>Но особым плюсом такого подхода можно указать следующее:

GZ>
GZ>string str1="this is the string";
GZ>.......
GZ>string str2="this is the string";
GZ>

GZ>Строка str1 и str2 — несмотря на то, что являются разными ссылками, в действительности ссылаются на одну и ту же строку.


Такое поведение и в С++. Еще в Borland C++ 3.1 было(merge duplicate strings). Только там оно управляемо через опции компилятора. Можно и отказаться

>Строка лежит в метаданных.


В С++ — в readonly данных (т.е. страница readonly). Изменить строку не удастся без шаманства.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.