Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
sizeof
Отправлено
Artem-1.6E-19
21 августа 2009, г. 11:31
Чёйто я торможу. sizeof должен же указывать сколько структура реально занимает байтов. И если я указываю ей __attribute__ ((packed)) то и sizeof должен быть меньше.
Составить ответ
|
Вернуться на конференцию.
Ответы
уточнение: sizeof показывает размер в char'ах, а не в байтах. Разница будет, если char двухбайтный
-
Каа
(21.08.2009, 12:43:50
213.132.80.172
,
пустое
)
"When the sizeof operator is applied to a class, struct, or union type, the result is the number of bytes in an object of that type, plus any padding added to align members on word boundaries. The result does not necessarily correspond to the size calculated by adding the storage requirements of the individual members. The /Zp compiler option and the pack pragma affect alignment boundaries for members." © MSDN All rights reserved
-
DASM
(21.08.2009, 12:49:45
203.185.50.220
,
пустое
)
странно... Может в Си не так? Щаз поищу.
-
Каа
(21.08.2009, 12:53:53
213.132.80.172
,
пустое
)
всегда знал, что от Техаса плохеет с памятью :-)))
-
DASM
(21.08.2009, 12:58:50
203.185.50.220
,
пустое
)
не понял про Техас
-
Каа
(21.08.2009, 13:08:30
213.132.80.172
,
пустое
)
6.5.3.4 The sizeof operator (+)
-
Каа
(21.08.2009, 13:07:31
213.132.80.172
, 540 байт,
ссылка
)
Так, не будем подменять тезисы - ложное - "sizeof всегда возвращает размер объекта в char на истинное - "размер char в битах может быть больше 8"
-
DASM
(21.08.2009, 13:20:12
203.185.50.220
,
пустое
)
оба этих тезиса верны
-
Каа
(21.08.2009, 13:29:28
213.132.80.172
,
пустое
)
так в char или байтах ? sizeof (class) четко написано, что вернет размер в байтах. Если в классе 2 char , то sizeof (class) должен быть равен 4 при двухбайтном char, но sizeof (char) тем не менее будет равен 1. Не так ли?
-
DASM
(21.08.2009, 13:33:19
203.185.50.220
,
пустое
)
в документе, который я привел, написано, что sizeof(char)==1 и любой объект состоит из целого числа char'ов. Стало быть, все измеряется в char'ах.
-
Каа
(21.08.2009, 13:37:7
213.132.80.172
,
пустое
)
Вобщем все проще "Операция sizeof выдает размер своего операнда в байтах. (понятие байт в языке не определено, разве только как значение операции sizeof." Кернигат Ритчи (с) Итого имеем байт - не обязан быть равен 8. Тогда да, верны оба утверждения.
-
DASM
(21.08.2009, 13:45:19
203.185.50.220
,
пустое
)
согласен
-
Каа
(21.08.2009, 13:48:46
213.132.80.172
,
пустое
)
видимо, на машинах, где char больше 8 бит, байт тоже больше 8 бит. Так что понятия char и байт взаимосвязаны.
-
Каа
(21.08.2009, 13:42:41
213.132.80.172
,
пустое
)
может быть но не обязан - может выравнивая то и не произошло ?
-
DASM
(21.08.2009, 11:34:21
203.185.50.220
,
пустое
)
Ответ: Тогда я совсем ничего не понимаю в жизни.
-
Artem-1.6E-19
(21.08.2009, 11:38:58
127.0.0.1,77.87.39.155
, 436 байт)
Так ведь обе структуры выровненные. char'ы выравниваются на границу байта.
-
vmp
(21.08.2009, 11:45:24
10.0.1.100,87.245.155.198
,
пустое
)
Все. Получилось. Спасибо.
-
Artem-1.6E-19
(21.08.2009, 11:48:8
127.0.0.1,77.87.39.155
,
пустое
)
гм, а зачем ему это паковать ? Проц хазватит это одни словом в свой регистр и будет уже регистр кромсать. Попробуй кстати 9 char - оф, хотя не уверен что изменится что-то.
-
DASM
(21.08.2009, 11:41:42
203.185.50.220
,
пустое
)
А если я хочу третий инкрементировать? Вообще он по идее должен это по границе слова бить.
-
Artem-1.6E-19
(21.08.2009, 11:46:49
127.0.0.1,77.87.39.155
, 59 байт)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
поделите двойку на единицу:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru