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

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

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

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

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

Опубликовано: 2014.07.27, последняя правка: 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татьи на компьютерные темы

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

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




Последние отзывы

2021/05/09 00:35 ••• Владимир Соколов
Энтузиасты-разработчики компиляторов и их проекты

2021/04/25 08:41 ••• kt
Некошерный «goto»

2021/04/19 17:01 ••• Клихальт
О наименовании проекта и языка программирования

2021/04/17 18:29 ••• Comdiv
Не поминайте всуе PL/1

2021/04/07 17:35 ••• :NONAME
Почему обречён язык Форт

2021/04/04 18:29 ••• kt
Переключатель

2021/04/04 18:04 ••• Александр Коновалов aka Маздайщик
Каким должен быть язык программирования?

2021/04/02 19:32 ••• Александр Коновалов aka Маздайщик
Циклы

2021/04/01 14:07 ••• Александр Коновалов aka Маздайщик
Условные операторы

2021/04/01 13:26 ••• Александр Коновалов aka Маздайщик
Комментарии автоматической генерации документации

2021/04/01 13:13 ••• Александр Коновалов aka Маздайщик
Длинные комментарии

2021/04/01 13:03 ••• Александр Коновалов aka Маздайщик
Некоторые «вкусности» Алгол-68

2021/04/01 12:15 ••• Александр Коновалов aka Маздайщик
Устарел ли текст как форма представления программы

2021/03/28 22:31 ••• Виталий Монастырский
Так ли нужны операции «&&», «||» и «^^»?

2021/03/28 13:39 ••• Виталий Монастырский
Бесплатный софт в мышеловке