Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Новости и прочее

Безопасность и размещение объектов переменной длины в стеке

Трюки со сдвигом указателя вершины стека, переключения с родного стека на зарезервированный участок памяти под другой стек проводились с компилятором MSVC. Глубокого изучения безопасности такого подхода не было. Потенциальые проблемы видятся в следующем.
Безопасность и размещение объектов переменной длины в стеке

  • Обработка исключений. Не уверен, что все будет гладко. Дело в том, что при обработке исключений производится обратная раскрутка стека. И хотя адреса возвратов мы не трогали, но мало ли… Но мы разрабатываем новый язык, и у нас будет собственная поддержка исключений, со стеками и их раскрутками. Даже если будет использоваться тот же MSVC в качестве ассемблера высокого уровня.
  • Исчерпание стека. Когда в стеке размещали объекты фиксированной длины, а всё прочее — в «куче», то надо было умудриться исчерпать память в стеке. Но мы хотим сделать стек основным местом хранения данных. Поэтому под стек надо выделять достаточно количество памяти.
  • Уничтожение объектов по ходу работы подпрограммы. Любые объекты, созданные в «куче», могут быть уничтожены в любое время в любом порядке, лишь бы это не противоречило логике программы. Для объектов, созданных в стеке, это не так. Объекты в стеке должны уничтожаться в порядке, обратном их созданию. В противном случае «утилизированная» память не может быть использована, для новых объектов будет выделены новые участки памяти, что грозит её исчерпанием.
  • Уничтожение объектов по окончании работы подпрограммы. Всё, что хранится в стеке, уничтожается простым сдвигом указателя вершины стека. Для объектов, у которых деструктор определён, сначала должен вызываться деструктор, и лишь в конце — сдвиг вершины стека.
            Читаем далее следующую статью: Массивы, структуры, типы, классы переменной длины.

Почитайте ещё:

Последняя правка: 2018-10-29    15:50

Оцените

Отзывы

     2015/02/11 13:10, Павел

Сравнивать "свой корректно работающий диспетчер «кучи». Чтоб была поддержка «умных указателей», подсчёт ссылок, корректное удаление ссылающихся друг на друга объектов, перемещение объектов с изменением указателей на них для устранения фрагментации" и "командами «PUSH <param>» «ADD ESP,4»" некорректно, т.к. это разные задачи.

     2015/02/11 18:00, Автор сайта

Конечно, куча — весьма универсальное решение. Но очень часто можно обойтись стеком, и стоит это три копейки. Конечно, сравнивать автомобиль и велосипед некорректно, но нередко в булочную лучше проехать на велосипеде, а не на такси.

     2016/11/06 09:20, rst256

Конечно, сравнивать автомобиль и велосипед некорректно, но нередко в булочную лучше проехать на велосипеде, а не на такси.

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

Написать отзыв

Написать автору можно на электронную почту mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Каким должен быть язык программирования?

Анализ и критика

Устарел ли текст как форма представления программы

Русский язык и программирование

Многоязыковое программирование

Синтаксис языков программирования

Синтаксический сахар

Некоторые «вкусности» Алгол-68

«Двухмерный» синтаксис Python

Почему языки с синтаксисом Си популярнее языков с синтаксисом Паскаля?

Должна ли программа быть удобочитаемой?

Стиль языка программирования

Тексто-графическое представление программы

●  Разделители

●  Строки программы

●  Слева направо или справа налево?

Комментарии

●  Длинные комментарии

●  Короткие комментарии

●  Комментарии автоматической генерации документации

●  Нерабочий код

●  Помеченные комментарии

Нужны ли беззнаковые целые?

Шестнадцатиричные и двоичные константы

Условные операторы

Переключатель

Циклы

●  Продолжение цикла и выход из него

Некошерный «goto»

Изменение приоритетов операций

Операции присвоения и проверки на равенство. Возможно ли однаковое обозначение?

Так ли нужны операции «&&», «||» и «^^»?

Постфиксные инкремент и декремент

Почему в PHP для конкатенации строк используется «.»?

Указатели и ссылки в C++

Использование памяти

Почему динамическое распределение памяти — это плохо

Как обеспечить возврат функциями объектов переменной длины?

●  Типы переменного размера (dynamically sized types, DST) в языке Rust

●  Массивы переменной длины в C/C++

●  Размещение объектов в стеке, традиционный подход

●  Размещение объектов переменной длины с использованием множества стеков

●  Размещение объектов переменной длины с использованием двух стеков

●  Реализация двухстековой модели размещения данных

●  Двухстековая модель: тесты на скорость

●  Изменение длины объекта в стеке во время исполнения

●  Размещение объектов переменной длины с использованием одного стека

Можно ли забыть о «куче», если объекты переменной длины хранить в стеке

Безопасность и размещение объектов переменной длины в стеке

Массивы, структуры, типы, классы переменной длины

О хранении данных в стеке, вместо заключения

Описание языка

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

Компьютерный юмор

Новости и прочее

Последние комментарии

2018/12/16 17:17 ••• Геннадий Тышов
✎ Программирование без программистов — это медицина без врачей

2018/12/07 08:57 ••• Автор сайта
✎ Почему обречён язык Форт

2018/12/07 08:36 ••• Автор сайта
✎ Нужны ли беззнаковые целые?

2018/12/03 13:51 ••• kt
✎ Экстракоды при синтезе программ

2018/11/30 17:56 ••• Freeman
✎ Изменение приоритетов операций

2018/11/30 17:20 ••• Автор сайта
✎ Почему языки с синтаксисом Си популярнее языков с синтаксисом Паскаля?

2018/11/26 14:23 ••• Автор сайта
✎ Так ли нужны операции «&&», «||» и «^^»?

2018/11/18 15:21 ••• Freeman
✎ Устарел ли текст как форма представления программы

2018/11/17 03:28 ••• Comdiv
✎ Изменение длины объекта в стеке во время исполнения

2018/11/16 12:53 ••• Автор сайта
✎ Помеченные комментарии

2018/11/11 14:01 ••• Александр Коновалов aka Маздайщик
✎ Нерабочий код

2018/11/11 13:39 ••• Александр Коновалов aka Маздайщик
✎ О русском языке в программировании