С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
andrevor
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 4
#1

Размер структуры больше суммы размеров ее полей? - C++

22.11.2012, 22:18. Просмотров 563. Ответов 5
Метки нет (Все метки)

Доброго времени суток.
Прошу помочь разобраться.
Дано - есть такой тестовый код, составленный для проверки подозрения, вынесенного в заголовок:
C++
1
2
3
4
5
6
7
8
9
10
11
    struct test_type
    {
        short t1;
        long  t2;
    };
    test_type test_var;
 
int main()
{
    return 0;
}
Запустив пошаговую отладку, в watch добавляю:
sizeof test_var - результат 8
sizeof test_var.t1 + sizeof test_var.t2 - результат 6

Как это объяснить и как с этим бороться? Подобная структура (но большего размера) создавалась для "бинарного" ввода/вывода в файл, но поле t2 при этом заполняется черте чем, а не ожидаемым значением...

P.S. проект создавался в Visual Studio2008
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2012, 22:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Размер структуры больше суммы размеров ее полей? (C++):

Структуры: Вывести все танки с 1940-1950 г. чей калибр , больше 50 мм. или же просто больше 50 - C++
Названия структуры: Танки. Ввод данных такой: Названия Год выпуска Калибр Скорость Вывести:

Структуры, нумерация полей структуры - C++
Добрый день, у меня есть задачка, она решена. Но меня попросили "предусмотреть нумерацию полей структуры, например 1)Имя:Петр и тд."....

Вывести строки матрицы, в которых модуль суммы отрицательных чисел больше модуля суммы положительных - C++
Друзья,помогите пожалуйста, если можете! Нужно создать матрицу M на N и заполнить её действительными числами, определить и вывести на...

Смещение полей структуры - C++
Как можно узнать смещение поля структуры относительно адреса структуры? Если просто сложить размеры предыдущих элементов, то результат...

Заполнение полей структуры - C++
Нужна ваша помощь! Нужно считать файл и записать в массив. Потом из этого массива надо раскидать значения по полям структуры. Как это...

Заполнение полей структуры - C++
Подскажите, в чем ошибка. #include "stdafx.h" #include <stdio.h> struct sign { char Lastname; char Firstname; char...

5
alsav22
5428 / 4823 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.11.2012, 22:24 #2
Цитата Сообщение от andrevor Посмотреть сообщение
как с этим бороться?
Бороться с этим так. Не читать (из файла) в память под стуктурой, и не записывать в файл память из под структуры. Чтение делать в именованные поля структуры, запись делать из именованных полей структуры. Иначе:
Цитата Сообщение от andrevor Посмотреть сообщение
поле t2 при этом заполняется черте чем, а не ожидаемым значением...
0
andrey_od
3 / 1 / 1
Регистрация: 20.11.2012
Сообщений: 6
22.11.2012, 22:29 #3
http://habrahabr.ru/post/90580/ вот интересная статья на эту тему
1
andrevor
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 4
22.11.2012, 23:21  [ТС] #4
Красиво...
Нечто подобное я и подозревал - но както не хотел верить в этакий... эээ.. ну не маразм, - такое принуждение к щастью. Ибо зачем обязательное выравнивание для x86?
Но вот помнится в свое время в разных "Трубо Паскакалях" была управляемая опция компилятора - выравнивать или нет. Конкретно в VC нет возможности отключить такую оптимизацию?
А то считывать 20-элементную (оригинальную) структуру по элементам както и заморочно, и не эстетично :-) И считать char-ным массивом в Си тоже не вариант - устанешь потом приведение типа расписывать.

Добавлено через 23 минуты
Лекарство, оказывается действительно есть, и буквально под рукой
Использование #pragma pack(push,1)... pack(pop)
0
Croessmah
22.11.2012, 23:29
  #5

Не по теме:

Цитата Сообщение от andrevor Посмотреть сообщение
А то считывать 20-элементную (оригинальную) структуру по элементам както и заморочно, и не эстетично :-)
да ну бросьте Вы =)

0
andrevor
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 4
23.11.2012, 21:59  [ТС] #6
бросить я бы рад - но нужно нести
а эстетика в программировании по старому опыту играет весьма важную роль
изменилась структура - переписывай весь ввод-вывод, извращение, натурально

ЗЫ метод с командами препроцессора по моей ссылке работает, считывает из файла как надо
0
23.11.2012, 21:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2012, 21:59
Привет! Вот еще темы с ответами:

Размер структуры - C++
Всем доброго дня! Не могу понять... Вот код. struct T { char i; int a; int b; int c; char j;

Размер структуры? - C++
Здравствуйте, дорогие форумчане! Есть доп. зд - подсчитать размер структуры. Только я очень слабо понимаю где , что и как делать:wall: ...

Заполнение полей структуры из cin - C++
Можно ли с помощью макросов или чего-либо еще превратить по смыслу конструкцию cin>>(экземпляр класса\структуры) в команду 'заполни все...

Изменить одно из полей структуры - C++
Пользователь вводит с клавиатуры день рождения(напр 15) Внутри структуры изменить 15 на 1.И далее вывести на экран.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.