63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
||||||
1 | ||||||
Структуры и расположение данных03.09.2020, 18:40. Показов 1053. Ответов 6
Метки нет (Все метки)
Есть структура
2.Почему адреса этих полей растут в нормальном направлении, а не в обратном? К примеру у меня вывод такой: 7ffe3bf97000(140729904623624) 7ffe3bf97004(140729904623620) 7ffe3bf97008(140729904623624) P.S. то что в скобках и сами скобки я вручную дописал
0
|
03.09.2020, 18:40 | |
Ответы с готовыми решениями:
6
Понятие структуры данных. Элементарные структуры данных. Простые структуры данных Расположение полей структуры в памяти Расположение полей структуры в памяти Расположение структуры |
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
03.09.2020, 19:03 | 2 |
Да, они будут лежать последовательно. Но между ними будет добавлен промежуток, padding, в соответствии с выравниванием - у тебя это 4 байта
Добавлено через 2 минуты Почему они должны расти в обратном направлении?
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
|
|
03.09.2020, 19:16 | 3 |
Сообщение было отмечено ReYalp как решение
Решение
Поля всегда лежать "последовательно", ибо память - линейна. Как же еще?
Если ваш вопрос про сохранение объявленного порядка, то есть гарантия, что указатели на эти поля сохранят тот же порядок с точки зрения операторов сравнения указателей. То есть (unsigned char *) &t.a < (unsigned char *) &t.c гарантировано является true . Понятно, что с практической точки зрения это значит, что порядок в памяти физически будет именно таким.Откуда вообще возник такой вопрос? С чего это вдруг они будут "в обратном"?
0
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
03.09.2020, 19:35 [ТС] | 4 |
TheCalligrapher, с того что стек растёт в обратном? Последовательно я имел ввиду ровно одно за другим
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
|
|
03.09.2020, 19:40 | 5 |
Фраза "стек растёт в обратном" лишь означает, что указатель вершины стека в процессе наполнения стека уменьшается, а не увеличивается. Однако память внутри стека - это обычная память, которая как обычно адресуется в прямом порядке. Никакой специальной "обратной памяти" для стека не создается.
Это означает, что если вы поместите в стек эту структуру как единое целое, то поля в ней будут располагаться в обычном, прямом порядке. Если бы вы поместили в стек три отдельные переменные, по одной: int a; , short c; и double d; , то тогда можно было бы ожидать "обратного порядка" их расположения в памяти. А когда вы помещаете в стек структуру целиком, как единое целое, то направление роста стека тут ни на что не влияет вообще.
1
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
03.09.2020, 19:42 [ТС] | 6 |
TheCalligrapher, а насчёт того есть ли гарантия что поля лежат строго одного за другим (учитывая padding) то что?
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
|
|
03.09.2020, 19:45 | 7 |
0
|
03.09.2020, 19:45 | |
03.09.2020, 19:45 | |
Помогаю со студенческими работами здесь
7
Динамические структуры данных. Организация данных в списковые структуры Динамические структуры данных. Организация данных в списковые структуры Динамические структуры данных. Программа ввода в структуры и вывода информации из неё. Динамические структуры данных, списковые структуры (надо разобраться что делает программа) Структуры. Вызов данных структуры по указателю. с++ Расположение базы данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |