0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 121
|
||||||
1 | ||||||
Количество памяти на union и struct04.12.2016, 23:01. Показов 7848. Ответов 6
Метки нет (Все метки)
0
|
04.12.2016, 23:01 | |
Ответы с готовыми решениями:
6
Union, struct Union внутри struct Обращение к переменным в union со struct Illegal use of incomplete struct/union/class |
Ушел с форума
|
|
04.12.2016, 23:11 | 2 |
MyStruct: int занимает 4 байта, char один байт, в итоге получаем 5 байт +
3 байта на выравнивание. Выравнивание нужно например для того, чтобы в массиве MyStruct все поля 'i' (которые int) были выравнены по границе sizeof (int), т.е. 4 байта. Выравнивание полезно в целях производительности, а также для определенных гарантий атомарности доступа (на некоторых платформах доступ к невыравненным данным вообще либо очень медленный, либо генерирует исключение). Packet: int и char занимают одну и ту же память. Т.е. размер Packet определяется по наибольшему типу, т.е. 4 байта. Надеюсь, расписал понятно и простым языком.
1
|
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
|
|
04.12.2016, 23:12 | 3 |
В union поля налагаются в памяти, а в struct идут последовательно. 5 байт выравнивается на четырёхбайтную границу.
1
|
Вездепух
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
|
|
04.12.2016, 23:14 | 4 |
Это как это? По сути - это совершенно разные вещи. Ничего "одинакового" там и близко нет.
struct хранит все поля одновременно, одно за другим, по порядку. Размер struct равен суммарному размеру его полей плюс "пустые" байты для выравнивания.union хранит свои поля одно поверх другого, т.е. храниться в union в каждый момент времени может только одино-единственное поле из списка. Размер union равен макисмальному размеру его полей.
0
|
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 121
|
|
04.12.2016, 23:25 [ТС] | 5 |
А как правильно понять, что в union " налагаются в памяти", ну если в struct примерно представляю как могут последовательно и выравниваться, то там не понятно.
И еще вопрос в чем ограничение реализации union, почему например struct не сделали таким же в целях экономии.
0
|
Вездепух
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
|
|
05.12.2016, 00:14 | 6 |
В целях какой "экономии"?
Каждый раз, когда вы записывате в поле union какие-то данные, вы тем самым уничтожаете данные всех остальных полей. Вас такое устравиает? Когда устравиает - пользуйтесь union .Но в большинстве случаев нам такого не надо. В большинстве случаев нам надо, чтобы все поля хранились одновременно и независимо и никто никого не уничтожал. А это - struct .
1
|
0 / 0 / 0
Регистрация: 11.08.2015
Сообщений: 121
|
|
05.12.2016, 00:18 [ТС] | 7 |
А все понял, просто в примере в книжке там поочередно присваивалось значение, потом выводилось, и то ,что другие затираются не видно.
0
|
05.12.2016, 00:18 | |
05.12.2016, 00:18 | |
Помогаю со студенческими работами здесь
7
В чем отличия между union и struct? два и более struct в union неправильно работает std::bind1st: is not a class, struct, or union type Задача про знак зодиака (Struct, string, union, if) Не могу исправить error C2228: left of '.isWorked' must have class/struct/union error C2228: left of '.add' must have class/struct/union type. в чем ошибка? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |