Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> непонятки с move semantics 
V
    Опции темы
S.A.P.
Дата 27.3.2013, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 9
Всего: 71



Пытаюсь въехать в С++11. Запускаю такой код
Код
using namespace std;
string s1 ("123");
cout << hex << (void*)&s1[0] << endl;
string s2 (move(s1));
cout << hex << (void*)&s2[0] << endl;

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

Компилю на VC11

Это сообщение отредактировал(а) S.A.P. - 27.3.2013, 04:40
PM MAIL   Вверх
S.A.P.
Дата 27.3.2013, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: 9
Всего: 71



Вроде разобрался. Оказывается короткие строки до 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 
PM MAIL   Вверх
borisbn
Дата 27.3.2013, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



http://ideone.com/VvKBCS
Как видишь, зависит от реализации


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
volatile
Дата 27.3.2013, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 37
Всего: 85



Цитата(S.A.P. @  27.3.2013,  05:26 Найти цитируемый пост)
компилятор решил, что такой тупой код быстрее копирования одного указателя

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


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1244 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.