|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|||||||||||
Стек вызовов03.02.2018, 12:18. Показов 4427. Ответов 15
Метки нет (Все метки)
Прочитал про то, что память не очищается после очистки стека от функции и просто освобождается. Логично предположил, что можно получить доступ к этой памяти и данным которые там лежат, набросал небольшой код:
По факту, указатели ссылаются на ту же ячейку памяти, но значение мусор. Т.е. значение перезаписалось? Что я не правильно понял? И что я не так делаю? Заранее спасибо! Добавлено через 16 минут то же самое и с динамической памятью:
0
|
|||||||||||
| 03.02.2018, 12:18 | |
|
Ответы с готовыми решениями:
15
Сколько адресов теоритически может содержать стек вызовов?
|
|
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
|
||
| 03.02.2018, 12:19 | ||
|
Avaddon74, C++ никаких вам гарантий на этот счёт, естественно, давать не будет, это вопрос того, как он реализован. У меня,к примеру, значения одинаковые получаются (g++-7, ubuntu, amd64). Скомпилируйте в ассемблерный код или дизассемблируйте объектный и посмотрите, что там происходит.
0
|
||
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|
| 03.02.2018, 12:28 [ТС] | |
|
alex white, Использую VS2015
Вот что у меня выдает
0
|
|
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|
| 03.02.2018, 12:29 [ТС] | |
|
0
|
|
|
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
|
|
| 03.02.2018, 12:35 | |
|
Avaddon74, попробуйте скомпилировать без каких либо отладочных опций, мб. код для отладки спец значения записывает в стек.
1
|
|
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
||||||
| 03.02.2018, 13:00 [ТС] | ||||||
|
Croessmah, А что тогда происходит в дебаг режиме? Что-то дополнительно пишется в стек?
Кстати, а с динамической памятью данные разные
0
|
||||||
|
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
|
|||||||
| 03.02.2018, 13:09 | |||||||
|
Avaddon74, с динамической памятью всё также зависит на реализацию. Записывать значения просто так смысла особо нет (разве что при отладке, для облегчения идентификации висячих указателей), но система выделения/освобождения памяти (код, выполняющийся при new, delete), может записывать туда значения для своих собственных нужд, например производить разметку блоков и строить из них связные списки (то есть, записывать в блоки адреса следующих блоков).
Добавлено через 4 минуты Avaddon74, Например, у меня эта программа
1
|
|||||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
|
| 03.02.2018, 16:23 | |
|
Avaddon74,
Рассмотрим те случаи когда время жизни объектов может завершится до того как завершится выполнение самой программы. Просто поймите следующее: 1. У каждого объекта расположенного в памяти есть время жизни (в зависимости от класса памяти у каждого объекта свое время жизни) 2. Для переменных созданных внутри функции время жизни ограничено закрывающей фигурной скобкой этой функции (то же самое в принципе относится и к другим конструкциям, у которых есть фигурные скобки). 3. Объекты созданные в динамической памяти живут до тех пор пока для их указателя не будет вызван delete Использовать просроченные объекты нельзя, и если время жизни объекта истекло, это вовсе не означает что сами данные моментально должны быть уничтожены. Для уничтожения данных нужно выполнять доп. операции а это не выгодно. Проще просто перезаписать свободную область новыми данными если они будут. Причем нет такого понятия как "уничтожить просроченные данные". В памяти всегда какие то данные есть, ну будут они например перезаписаны каким то мусором, и что? Только лишние операции будут что бы этот мусор туда забить. Насчет адресов - не парьтесь. Какие там выделяются адреса - вас особо заботить не должно, главное что бы одновременно используемые объекты не записывались по одному адресу Но опять же это не ваша забота.По сути у вас на стек кладется 2 инта. stack_pointer_addr = 1 push (stack_pointer_addr = 0) pop (stack_pointer_addr = 1) push (stack_pointer_addr = 0) нет ничего удивительного эти int-ы были расположены по одному и тому же адресу...
0
|
|
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|||||
| 03.02.2018, 17:18 [ТС] | |||||
![]() В общем, лично вы, меня не поняли, но ответ я уже получил. Добавлено через 4 минуты Я сисадмин с 15-летним стажем и прекрасно понимаю, что когда удаляешь файл с диска, то данные файла остаются, а удаляется только ссылка на него из таблицы, этим то я и хотел воспользоваться только по отношению к памяти и всё, вот и был поражен что я не смог получить нужные данные.
0
|
|||||
|
901 / 478 / 93
Регистрация: 10.06.2014
Сообщений: 2,700
|
||
| 03.02.2018, 17:18 | ||
![]() Я не в этом смысле Просто как бы вы не переживали по этому поводу Это не ваша задача. Компилятор сам должен генерить нужный код чтоб все лежало на своих местах и соответствовало стандарту и это все что вы вправе ожидать. Детали реализации - implementation defined В разных компиляторах может быть разный результат Их задача просто соответствовать стандарту а не оправдание ваших ожиданий
1
|
||
|
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
|
|||||||
| 03.02.2018, 17:34 | |||||||
1
|
|||||||
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|
| 03.02.2018, 17:38 [ТС] | |
|
0
|
|
|
Комп_Оратор)
|
|||
| 03.02.2018, 22:48 | |||
![]() Добавлено через 4 часа 48 минут
1
|
|||
|
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
|
|
| 03.02.2018, 23:03 [ТС] | |
|
0
|
|
| 03.02.2018, 23:11 | |
|
0
|
|
| 03.02.2018, 23:11 | |
|
Помогаю со студенческими работами здесь
16
Программа добавляет введенный массив 5*5 в стек и выводит полученный стек двумя столбцами
Переменные в стеке. Где хранятся? Как обрабатываются? Есть ли программный стек или только стек процессора? Сформировать стек из 6 цифр. Вывести стек на экран. Удалить элементы из стека, увеличить каждый из них на единицу и снов Сформировать стек из N чисел. Найти сумму нечетных чисел из стека. Результат поместить в стек Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2.
Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники".
В. . .
|
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии.
. . .
|
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
|
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут.
https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc
Первый документ красиво выглядит, но без схемы.
Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
|
|
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере".
Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
|
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти".
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2.
В качестве источника данных. . .
|
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер
Написал заготовку:
dotnet new console --aot -o UrlHandler
var items = args. Split(":");
var tag = items;
var id = items;
var executable = args;. . .
|
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3.
Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
|