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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 4х байтное целое число записать в char[4] 
:(
    Опции темы
mrbrooks
Дата 29.11.2010, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


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

Репутация: 19
Всего: 306



Цитата(baldina @  29.11.2010,  10:00 Найти цитируемый пост)
а как же operator=() ?

о!
PM MAIL   Вверх
cardinal
Дата 29.11.2010, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: нет
Всего: 99



Вы сделайте .асм листинг для последних трех предложений и посмотрим, что элегантней (мне например очень интересно) smile memcpy думаю отпадает (вызов функции, операции со стэком). Что делает компилятор с конструкцией union не знаю. Оператор () тоже. В смысле во что это компилируется не знаю.


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
azesmcar
Дата 29.11.2010, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 52
Всего: 211



Цитата(baldina @  29.11.2010,  10:00 Найти цитируемый пост)
а как же operator=() ?

а как же alignment?

PM   Вверх
baldina
Дата 29.11.2010, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 15
Всего: 101



Цитата

а как же alignment?

да никак. непричем он
PM MAIL   Вверх
azesmcar
Дата 29.11.2010, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 52
Всего: 211



Цитата(baldina @  29.11.2010,  10:47 Найти цитируемый пост)
да никак. непричем он 

Код

int val;
unsigned char s[sizeof(val)];
*(int*)s = val;

тут должна быть проблема, нет гарантии, что
Код

unsigned char s[sizeof(val)];

адрес s сможет разместить int
можно так
Код

unsigned char *s = new unsigned char[sizeof(val)];

оператор new должен вернуть указатель, способный разместить любой тип.

если я правильно помню такой код вызывал проблемы на SunOS.
Кто может проверить?

Это сообщение отредактировал(а) azesmcar - 29.11.2010, 10:56
PM   Вверх
baldina
Дата 29.11.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 15
Всего: 101



Цитата

нет гарантии, что ... адрес s сможет разместить int

что Вы имеете в виду?

Добавлено через 1 минуту и 51 секунду
особенно интересно в связи с  alignment
PM MAIL   Вверх
baldina
Дата 29.11.2010, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 15
Всего: 101



azesmcar, понял. вопрос снят  smile 

PM MAIL   Вверх
azesmcar
Дата 29.11.2010, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

Репутация: 52
Всего: 211



Цитата(baldina @  29.11.2010,  11:54 Найти цитируемый пост)
azesmcar, понял. вопрос снят   

 smile все равно отвечу для других интересующихся.
Цитата

Object types have alignment requirements (3.9.1, 3.9.2). The alignment of a complete object type is an
implementation-defined integer value representing a number of bytes; an object is allocated at an address
that meets the alignment requirements of its object type.

некоторые системы имеют требования к размещению типов. Например так: int должен размещаться по адресу, который делится без остатка на 4. Следовательно грубый cast адреса и размещение в нем типа int может нарушить это требование, отсюда и проблемы переносимости. Стандарт гарантирует, что оператор new вернет адрес, который (не знаю как первести) properly aligned для хранения объекта любого типа (этим занимается сама система).
Цитата

The pointer returned shall be suitably aligned so that it can be converted to a
pointer of any complete object type and then used to access the object or array in the storage allocated (until
the storage is explicitly deallocated by a call to a corresponding deallocation function).

а для стековых объектов такой гарантии нет.
В Loki Александреску использовал трюк с union-ом max_align, но Саттер вроде писал, что это не 100% переносимо, хотя судя по тому, что он не привел примера, эта непереносимость скорее всего проявляется на сферическом компиляторе в вакууме smile 
http://www.gotw.ca/gotw/028.htm


Это сообщение отредактировал(а) azesmcar - 29.11.2010, 13:06
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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