Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 31.10.2023
Сообщений: 14

Структура стека в MSVC

01.11.2023, 11:40. Показов 1225. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<iostream>
using namespace std;
 
int main()
{
    int a{};
    cout << &a << endl;
    if (true)
    {
        int b{};
        cout << &b << endl;
        int c{};
        cout << &c << endl;
        int d{};
        cout << &d << endl;
    }
    int e{};
    cout << &e << endl;
    int f{};
    cout << &f << endl;
    int g{};
    cout << &g << endl;
 
    return 0;
}
Вывод в консоль:
0000002D7952F504
0000002D7952F524
0000002D7952F544
0000002D7952F564
0000002D7952F584
0000002D7952F5A4
0000002D7952F5C4
А должен выглядеть примерно так:
0000002D7952F504
0000002D7952F508
0000002D7952F50C
0000002D7952F510
0000002D7952F508
0000002D7952F50C
0000002D7952F510
Почему стек заполняется таким образом?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.11.2023, 11:40
Ответы с готовыми решениями:

Структура стек (: добавить элемент в стек, удалить элемент из стека, получить значение с вершины стека, размер стека...)
Всем привет,ребят помогите пожалуйста с лабой,вообще без понятия про стеки:( Может кто то делал,или встречался с таким заданием: ...

Почему в MSVC++ 2008 компилируется, а в MSVC++ 2010 вылезает много ошибок?
Кстати, перед запуском в 2010 предлагает конвертировать код. Ну а чем эти две студии отличаются, что вызывает большое количество ошибок?

Где можно скачать MSVC 1.0 или MSVC 1.5 ?
Где можно скачать MSVC 1.0 или MSVC 1.5 ?

21
0 / 0 / 0
Регистрация: 31.10.2023
Сообщений: 14
03.11.2023, 10:41  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Нет, просто на многих платформах так сложилось, что стек обычно "растет" сверху вниз, то есть в направлении убывания адресов. То есть с этой точки зрения все наоборот: сперва идут именно переменные верхнего уровня. А лишь потом переменные вложенных блоков. Хотя в рамках одного кадра стека компилятору и не обязательно придерживаться этого правила (там он может располагать переменные как угодно), в вашем примере видно, что он все равно его придерживался.
Было бы действительно логично и структура видна сразу, если бы направление роста внутри блоков совпадало с направлением приращения блоков.

Либо так:
000000029F39FBF8
000000029F39FBF4
000000029F39FBF0
000000029F39FBEC
начало первой функции:
000000029F39FBC8 значение переменной: 1
000000029F39FBC4 значение переменной: 2
000000029F39FBC0 значение переменной: 3
конец первой функции.
000000029F39FBE8
000000029F39FBE4
000000029F39FBE0
000000029F39FBDC
начало второй функции:
000000029F39FBC0 значение переменной: 1
000000029F39FBC4 значение переменной: 2
000000029F39FBC8 значение переменной: 3
конец второй функции.
000000029F39FBD8
000000029F39FBD4
000000029F39FBD0
000000029F39FBCC

Либо так:
000000029F39FBCC
000000029F39FBD0
000000029F39FBD4
000000029F39FBD8
начало первой функции:
000000029F39FBFC значение переменной: 1
000000029F39FС00 значение переменной: 2
000000029F39FС04 значение переменной: 3
конец первой функции.
000000029F39FBDC
000000029F39FBE0
000000029F39FBE4
000000029F39FBE8
начало второй функции:
000000029F39FС04 значение переменной: 1
000000029F39FС00 значение переменной: 2
000000029F39FBFC значение переменной: 3
конец второй функции.
000000029F39FBEC
000000029F39FBF0
000000029F39FBF4
000000029F39FBF8
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Не совсем понятно, при чем здесь аллокатор.
Вы показали, что структура действительно есть. Так что смысл в этом отпадает, наверное. Хотя, если бы существовал способ управления этими процессами или хотя бы возможность привести этот процесс к какому-то более логичному варианту, то было бы удобнее.
Цитата Сообщение от DrOffset Посмотреть сообщение
Зачем это нужно, можете объяснить?
Для понимания, в первую очередь.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12944 / 6811 / 1821
Регистрация: 18.10.2014
Сообщений: 17,236
03.11.2023, 10:58
Цитата Сообщение от Adamar Посмотреть сообщение
Было бы действительно логично и структура видна сразу, если бы направление роста внутри блоков совпадало с направлением приращения блоков.
Внутри блока никакого "направления роста" обычно нет вообще. Внутри блока компилятор будет располагать переменные не в порядке объявления, а скорее из соображений выравнивания, компактификации, оптимизации доступа и т.п. Переменные одного размера скорее всего будут группироваться в памяти вместе, даже если в исходно тексте в блоке они были объявлены далеко друг от друга

То есть сравнивать порядок расположения в памяти переменных из одного блока с их порядком у вас в исходном коде никакого смысла нет.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.11.2023, 10:58
Помогаю со студенческими работами здесь

Переход от MSVC 2017 к MSVC 2019
Добрый день, До сих пор я использовал MSVC 2017 x64, но планирую перейти на компилятор MSVC 2019 x64 в связи с тем, что 2017 не...

Дан указатель Р1 на вершину непустого стека. Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями, а
Помогите срочно составить задачу: Дан указатель Р1 на вершину непустого стека. Создать два новых стека, переместив в первый из них все...

Дан указатель Top1 на вершину непустого стека. Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями,
Здравствуйте, Уважаемые пользователи!!! Помогите пожалуйста решить данную задачу : Дан указатель Top1 на вершину непустого стека....

Задан указатель P1 на вершину непустого стека. Создать два новых стека
Добрый вечер, у меня возникла проблемка с такой программкой. Вывести в компонент Label. Буду очень очень благодарен. ...

Создать два новых стека, с четными и нечетными элементами первоначального стека
Дано указатель P1 на вершину непустого стека. Создать два новых стека , переместив в первый из них все элементы исходного стека с четными...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru