Так что я в настоящее время студент и имею программирование couse.Почему sizeof показывает 4 байта для символа?
Сегодня мы имели об использовании SizeOf в различных классах (если он имел 1 или 2 Int int's и так далее)
Одна часть примера я нашел странным было это:
class TwoIntAndACharClass
{
public:
int x_;
int y_;
char z_;
};
и часть, чтобы проверить его
TwoIntAndACharClass o3b;
cout << "Sizeof TwoIntAndACharClass = " << sizeof(o3b) << "\n";
Таким образом, в программе я мог видеть класс с 1 полукокса занимает 1 байт. Поэтому, когда я увидел это, я подумал, что увижу 9 байтов и не 12
Итак, сначала я подумал, что это было странно, но через некоторое время я пришел к выводу, что он может сэкономить несколько блоков из 4 байтов.
Чтобы быть на 100% уверенным, что это правда, я попытался добавить новую переменную в класс (двойную переменную 8 байтов), а общий размер увеличился с 12 до 24 байтов. Это означает, что char теперь должен был быть 8 байтов, поэтому моя последняя теория не удалась.
Моя последняя теория заключалась в том, что она приняла бы самую большую уже объявленную переменную и использовала бы ее размер для переменной char _z, поскольку это работало как с длинным длинным int (8 байтами), так и с двойным (также 8 байтами)
Итак, мой вопрос в том, является ли моя последняя теория истинной - или это что-то другое, заставляя char брать больше памяти, чем необходимо? (мой учитель сказал, что каждый компилятор может справиться с этим по-другому, но я попробовал его на визуальной студии Microsoft, а другой попробовал его на другом компиляторе с теми же результатами, но это правда, так это то, как это обрабатывается компилятором?)
Извините за мой плохой английский.
Два слова: ошибка округления. Ну, не совсем «ошибка», но размеры структур округляются по-разному (и поля внутри структуры переустановлены) в соответствии с компилятором, ОС и ЦП. Вы можете объявить структуру «упакованной», чтобы предотвратить это, хотя с некоторой опасностью страшного «неопределенного поведения». –
Зачем вам задавать вопрос: «Почему sizeof показывает 4 байта для символа», *, когда вы не пробовали использовать 'sizeof' на' char'? Разве вам не приходило в голову, что это может быть полезным экспериментом? ;) – jalf
Попробуйте добавить еще один символ в конец структуры. Сколько раз вы можете сделать это до изменения размера класса? –