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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структуры. Какие-то парадоксы!? Help 
:(
    Опции темы
Aids
Дата 30.10.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



создаю следующие структуры:

Код

typedef unsigned long       DWORD;
typedef unsigned short      WORD;

struct TMy{
    WORD n;
};

размер 2 байта

struct TMy{
    DWORD k;
};

размер 4е байта

struct TMy{
    WORD n;
    DWORD k;
};


размер 8 байт? почему так? у меня уже голова опухла. у меня студия Visual Studio 2005
PM MAIL   Вверх
zim22
Дата 30.10.2009, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

Репутация: 29
Всего: 69



Цитата(Aids @  30.10.2009,  10:27 Найти цитируемый пост)
размер 8 байт? почему так? у меня уже голова опухла. 

это всё из-за выравнивания. добавь #pragma pack(1) перед описанием структуры.

Это сообщение отредактировал(а) zim22 - 30.10.2009, 11:43


--------------------
PM MAIL   Вверх
Andrey44
Дата 30.10.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 2
Всего: 26



Ну во-первых DWORD и WORD это встроенные типы данных
А во вторых идет выравнивание структур

Добавлено через 59 секунд
Немного не успел


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Aids
Дата 30.10.2009, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо вам за подсказку.
а зачем это выравнивание нужно? 
PM MAIL   Вверх
Lazin
Дата 30.10.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 27
Всего: 154



Цитата(Andrey44 @  30.10.2009,  11:44 Найти цитируемый пост)
Ну во-первых DWORD и WORD это встроенные типы данных

O RLY? и давно?
PM MAIL Skype GTalk   Вверх
Andrey44
Дата 30.10.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 2
Всего: 26



Цитата(Lazin @  30.10.2009,  12:59 Найти цитируемый пост)
O RLY? и давно? 
 smile Извиняюсь, я имел ввиду затайпдефины  smile 

Это сообщение отредактировал(а) Andrey44 - 30.10.2009, 13:13


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
bsa
Дата 30.10.2009, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Andrey44 @ 30.10.2009,  13:12)
Извиняюсь, я имел ввиду затайпдефины

да что ты? что-то у меня нет ни одного хидера, в котором это сделано... Или ты считаешь, что ОС Windows единственная в мире?

Добавлено через 1 минуту и 26 секунд
Цитата(Aids @ 30.10.2009,  12:53)
а зачем это выравнивание нужно?

для ускорения работы процессора с памятью. Он быстрее работает, когда данные выровнены по машинным словам (у тебя машинное слово 32 бита = 4 байта)
PM   Вверх
Aids
Дата 30.10.2009, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



всем спасибо
PM MAIL   Вверх
Anikmar
Дата 30.10.2009, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 5
Всего: 59



Цитата(bsa @  30.10.2009,  15:53 Найти цитируемый пост)
да что ты? что-то у меня нет ни одного хидера, в котором это сделано... Или ты считаешь, что ОС Windows единственная в мире?

А как это ( в смысле WORD и DWORD) обзывается в других ОС? - чисто из интереса.
PM MAIL ICQ   Вверх
Andrey44
Дата 2.11.2009, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 2
Всего: 26



Цитата(bsa @  30.10.2009,  15:53 Найти цитируемый пост)
Или ты считаешь, что ОС Windows единственная в мире?
Нет не считаю, и даже знаю что не единственная.
и все-же
Цитата(Anikmar @  30.10.2009,  23:32 Найти цитируемый пост)
А как это ( в смысле WORD и DWORD) обзывается в других ОС? - чисто из интереса. 




--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
mrbrooks
Дата 2.11.2009, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Anikmar @  30.10.2009,  23:32 Найти цитируемый пост)
А как это ( в смысле WORD и DWORD) обзывается в других ОС? - чисто из интереса. 

думаю никак. если надо - сам переопределишь  smile 
другое дело в том же QT что нибудь эдакое есть.
PM MAIL   Вверх
Anikmar
Дата 2.11.2009, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 5
Всего: 59



Цитата(mrbrooks @  2.11.2009,  08:59 Найти цитируемый пост)
думаю никак. если надо - сам переопределишь   

Что переопределю? Как это изначально называется - чтобы было что переопределять.
PM MAIL ICQ   Вверх
azesmcar
Дата 2.11.2009, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Anikmar @  2.11.2009,  10:10 Найти цитируемый пост)
Что переопределю? Как это изначально называется - чтобы было что переопределять. 

Например int и short. В стандартном заголовочном файле <limits> есть препроцессоры UINT_MAX, USHRT_MAX, можно типы определить самому

Код

#if UINT_MAX == 0xFFFFFFFF
typedef int DWORD;
#else
...
#endif


PM   Вверх
bsa
Дата 2.11.2009, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



А в C99 есть типы int8_t/uint8_t, int16_t/uint16_t, int32_t/uint32_t, int64_t/uint64_t, которые определены в стандартном хидере stdint.h. Вот только компилятор от MS не поддерживает C99.
PM   Вверх
Anikmar
Дата 2.11.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 5
Всего: 59



Цитата(bsa @  2.11.2009,  12:06 Найти цитируемый пост)
А в C99 есть типы int8_t/uint8_t, int16_t/uint16_t, int32_t/uint32_t, int64_t/uint64_t, которые определены в стандартном хидере stdint.h. Вот только компилятор от MS не поддерживает C99.

На самом деле ИМХО очень полезные типы. Жаль, что в стандарт C++ что-то не торопятся их встроить.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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