|
0 / 0 / 0
Регистрация: 26.12.2023
Сообщений: 14
|
|||||||||||||||||||||
Компилятор, препроцессор, язык Си26.12.2023, 21:49. Показов 2764. Ответов 22
Всем привет. Стал изучать указатели и возник вопрос, связанный с инициализацией переменных и адресов. Что происходит с компилятором? Решил провести и программу для теста.
Алгоритм такой 1. Создать переменную 2. Выйти из области видимости 3. Создать переменную 4. Вернуться в область видимости 5. Проверить адрес Программа работает как и ожидалось, смещение в стеке 4 байта, но если повторить итерацию, то адреса дадут неожиданный результат, что сломало мне мозг. Для объяснении проблемы выведу адресацию в таком стиле X+0. Алгоритм выглядит так: инициализация X+0(имя переменной = i) выход из {} инициализация другой переменной, где ей дают X+4(потому что int занимает в стэке 4 байта, если я правильно понимаю) вход в {}, где снова инициализируется i, и ей снова дается адрес X+0 инициализация переменной i в другой области видимости{}, где ей даётся адрес X+8 но прикол в том, что на этот раз, программа выдала адреса другим образом. Ожидалось адресация X+0, X+4, X+8 и т.д., но она выдала X+0, X+8, X+4. Вопрос почему? Второй вопрос, как компилятор хранит переменные. Почему он понимает, что в одном месте к переменной X я обращаюсь по адресу X+0, а в другом месте к переменной Х, я обращаюсь по адресу X+N? Программа написана таким алгоритмом:
Вот полный код
Решил дописать код только что. У меня появилась теория, что инициализация переменных идет либо в порядке исполнения, либо с конца кода программы. Добавил 3 и 4ый указатель. Алгоритм инициализации: p2 p3 p4 p1 если рассматривать с точки зрения кода p1 p2 p4 p3 если рассматривать с точки зрения исполнения программы. Адресация не соответствует ожиданиям x+0 x+12 x+4 x+8 если рассматривать адресацию слева-направо и справа-налево с точки зрения кода и исполнения, это невозможно ни при каких обстоятельствах. Как и нелогичное поведение программы
Добавлено через 9 минут Всё. Я разобрался в теме. Инициализация переменных идет снизу вверх, не по алгоритму, а снизу вверх по коду. Просчитался.
p1, p4, p3, p2
0
|
|||||||||||||||||||||
| 26.12.2023, 21:49 | |
|
Ответы с готовыми решениями:
22
Как настроить компилятор Visual Studio 2017 на язык Си? Русский язык в консоли Windows 10. IDE: CodeLite. Компилятор: TDM-GCC-32 Ассемблер - это макропроцессор, транслятор, препроцессор, интерпретатор, компилятор, кросскомпилятор или транслитератор? |
|
Просто Лис
|
||
| 31.12.2023, 15:29 | ||
|
А так похоже на оптимизацию, область видимости одной переменной кончилась (и её lifetime), значит место свободное, можно переиспользовать.
0
|
||
|
913 / 339 / 135
Регистрация: 18.07.2017
Сообщений: 1,485
|
||
| 31.12.2023, 18:34 | ||
|
0
|
||
|
Просто Лис
|
||||||
| 31.12.2023, 18:51 | ||||||
|
В x86_64 в прологе функции сохраняется указатель на вершину стека, потом выделяется кадр функции. В эпилоге функции кадр функции "схлопывается".
0
|
||||||
| 31.12.2023, 18:51 | |
|
Компилятор с языка PL/1 на язык Ассемблер Можно ли сделать язык(компилятор к нему тоже), который бы не зависел от ОС и програмного обеспечения? Препроцессор Препроцессор Препроцессор Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|