непонятки с move semantics

 
0
 
C++
ava
S.A.P. | 27.03.2013, 05:39
Пытаюсь въехать в С++11. Запускаю такой код
using namespace std;
string s1 ("123");
cout << hex << (void*)&s1[0] << endl;
string s2 (move(s1));
cout << hex << (void*)&s2[0] << endl;

Выводит разные оффсеты для внутреннего хранилища строк. Но почему?! Разве конструктор перемещения не должен там както хитро указатели подменить вместо копирования строк или я чегото не понял?

Компилю на VC11
Comments (3)
ava
S.A.P. | 27.03.2013, 05:26 #
Вроде разобрался. Оказывается короткие строки до 16 символов копируются в новое расположение, даже при вызове конструктора перемещения.
Кстати забавно компилятор решил, что такой тупой код быстрее копирования одного указателя
00E45E6C   > \8B448E E4     MOV EAX,DWORD PTR DS:[ESI+ECX*4-1C]
00E45E70   .  89448F E4     MOV DWORD PTR DS:[EDI+ECX*4-1C],EAX
00E45E74   >  8B448E E8     MOV EAX,DWORD PTR DS:[ESI+ECX*4-18]
00E45E78   .  89448F E8     MOV DWORD PTR DS:[EDI+ECX*4-18],EAX
00E45E7C   >  8B448E EC     MOV EAX,DWORD PTR DS:[ESI+ECX*4-14]
00E45E80   .  89448F EC     MOV DWORD PTR DS:[EDI+ECX*4-14],EAX
00E45E84   >  8B448E F0     MOV EAX,DWORD PTR DS:[ESI+ECX*4-10]
00E45E88   .  89448F F0     MOV DWORD PTR DS:[EDI+ECX*4-10],EAX
00E45E8C   >  8B448E F4     MOV EAX,DWORD PTR DS:[ESI+ECX*4-C]
00E45E90   .  89448F F4     MOV DWORD PTR DS:[EDI+ECX*4-C],EAX
00E45E94   >  8B448E F8     MOV EAX,DWORD PTR DS:[ESI+ECX*4-8]
00E45E98   .  89448F F8     MOV DWORD PTR DS:[EDI+ECX*4-8],EAX
00E45E9C   >  8B448E FC     MOV EAX,DWORD PTR DS:[ESI+ECX*4-4]
00E45EA0   .  89448F FC     MOV DWORD PTR DS:[EDI+ECX*4-4],EAX

 smile 
ava
borisbn | 27.03.2013, 06:41 #
http://ideone.com/VvKBCS
Как видишь, зависит от реализации
ava
volatile | 27.03.2013, 17:34 #
Цитата (S.A.P. @  27.3.2013,  05:26 findReferencedText)
компилятор решил, что такой тупой код быстрее копирования одного указателя

Все правильно.
Это особенности студийной std::string
Там короткие строки храняцца внутри самой std::string, без выделения дополнительной памяти, поэтому копирование указателей
не имеет смысла.

Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit