|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||||||||||||||||
С++ VLA и прочее...30.11.2012, 00:17. Показов 6984. Ответов 51
Метки нет (Все метки)
Dev-C++ меня удивляет. Вот такой код компилирует без ошибок и предупреждений:
0
|
|||||||||||||||||
| 30.11.2012, 00:17 | |
|
Ответы с готовыми решениями:
51
Скремблирование и прочее Рекурентная формула и прочее Дирректива define и прочее |
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
|||
| 01.12.2012, 00:08 | |||
|
Добавлено через 19 секунд
Добавлено через 1 минуту
0
|
|||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|||||||||||
| 01.12.2012, 00:29 | |||||||||||
|
Компилил
0
|
|||||||||||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
||
| 01.12.2012, 00:39 | ||
|
0
|
||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 01.12.2012, 00:49 | |
|
А SUB ESP, 0x34 после формирования EBP-фрейма и сохранения регистров такой незаметная, что капец.
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
|
| 01.12.2012, 00:55 | |
|
А понял тебя, базара нет, был неправ, бряк ставил не туда, если ты про это.
Но вообще-то если бы я не был уверен в своей правоте я бы не говорил. Итак, перед нами по твоему скриншоту РЕАЛЬНАЯ функций main; так вот, сейчас у тебя в стеке нет строки rrrr.... А стек увеличится и инструкцией 4013D5 в него и положится строка. Если ты хочешь сказать, что стек увеличится имено инструкцией SUB ESP, 34- кто же спорит? Эта инструкция выполнилась в main, что и требовалось доказать. Стек увеличивается в main. Да, так. Я с самого начал а это говорил. Ну и? Жду дальнейших разоблачений.
0
|
|
|
Форумчанин
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|||||||
| 01.12.2012, 00:58 | |||||||
Тем не менее, нету подтверждения того, что VLA массивы соответствуют стандарту С++. (Возможно я не нашел, но в С++03 такого точно не было). Но gcc умеет корректно обрабатывать данные запросы, приводя к константе размер массива на момент создания. А учитывая, что никаких плохих последствий из этого не выходит, можно предположить, что данное поведение будет узаконено в будущих стандартах С++ (все же в стандарт С подобную фичу включили). Но не будем загадывать. Код не соответствует стандарту, так делать не желательно, но в gcc (mingw соотв. тоже), данный код не приведет к ошибкам, его использование некорректно, но не критично. Есть и плюсы с такой "фичей" - новички, которые используют динамические массивы (все по фень-шую), очень, ну просто очень часто забывают освободить память, что приводит к утечке, а такого рода ошибки не отлавливаются на стадии компиляции, соотв. особо коварные. Использование VLA помогает решать множество стандартных задач не узнавая про дин. массивы. А со временем, когда дойдет время к изучению операций с памятью, маленькие кодеры прозреют, и запись VLA массивов заменится на связку new-delete.
1
|
|||||||
|
~ Эврика! ~
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
|
|
| 01.12.2012, 01:04 | |
|
Память выделяется в прелюдии подпрограммы. Инициализация проводится после выделения. Обе части расположены между точкой входа и ret, так что в принципе "в теле функции". Полезный код main() (инициализация того массива) начинается уже после прелюдии, в этом смысле память выделяется до выполнения полезного кода main(), но, естественно, после входа в call main. /discuss
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
||
| 01.12.2012, 01:10 | ||
|
Выделение памяти под массив и его инициализация происходят между точкой входа и ret, значит в main остальное- суета сует и томление духа. И давай уже завязывать.
0
|
||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 01.12.2012, 01:26 [ТС] | |
|
Всё. Окончательно запутался. Если выделение памяти под статический массив происходит во время работы программы, то зачем компилятору знать его размер?
0
|
|
|
Форумчанин
8217 / 5048 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
|
|
| 01.12.2012, 01:31 | |
|
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
||
| 01.12.2012, 01:37 | ||
|
А вообще противоречий здравому смыслу много. Сделали и сделали, забей. Может, исправятся когда...
1
|
||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||
| 01.12.2012, 02:10 [ТС] | ||
|
0
|
||
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
||||||||||||||||||||||||||||
| 01.12.2012, 03:34 | ||||||||||||||||||||||||||||
++++++++++++++++++++++++++++++++++++++++ ++++++++++++++ А статический-то массив вот он:
Такие дела. Добавлено через 29 минут Или. что то же самое:
1
|
||||||||||||||||||||||||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||
| 01.12.2012, 04:29 [ТС] | ||
|
0
|
||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||||||
| 01.12.2012, 05:04 [ТС] | ||||||||||
Добавлено через 10 минут Добавлено через 4 минуты
0
|
||||||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
| 01.12.2012, 09:29 [ТС] | |
|
Вот что в литературе.
0
|
|
| 01.12.2012, 10:41 | |
|
0
|
|
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,709
|
|||||||||
| 01.12.2012, 10:59 | |||||||||
...Кстати, да, вот тут Evg договорился до начала main. Видишь, я тоже поднимал (и поднимаю) подобные вопросы Почему глобальный объект, объявленный до main, конструируется в ней? ++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ https://www.cyberforum.ru/atta... 1354307130 1) Первая инструкция main Это PUSH EBP (подсвечена) 2) блаблабла 3) Инструкция, которая выделяет память SUB ESP, 34 4) блаблабла 5) Инструкция, которая кладёт в выделеную память строку "rrrrr....."REP MOVS BYTE блаблабла Порекомендуйте компилятор ++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ На счёт всего остального- я не знаю что и сказать. Все пишут как "должно быть", но преподносят это "как есть". А его нет, сам же видел, оно просто должно быть. С другой стороны если по стандарту описано, что для "нединамических" массивов память должна быть известна заранее, авторы так и напишут, согласен? Вот и всё. И кстати, тот же Стивен Прата (в той же книге "Статический класс памяти, внешнее связывание", таблица 9.1) определяет "статический" класс памяти не как "нединамический", а как либо объявленый с ключевым словом static, либо как объявленный вне функции, это то, о чём я написал в предыдущем посту и это то, чему не соответствует твоя цитата. Порекомендуйте компилятор Кто прав в этом случае я решил для себя. По-моему Прата убедительнее. ++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++ Как видишь, есть противоречия между всем и всем. Но что делать? Надо двигаться вперёд; где-то напролом, где-то как. Периодически возвращаясь к этому нерешённому вопросу, коих будет ещё очень много. Однажды решишь эти вопросы не абсолютно, но ДЛЯ СЕБЯ и скажешь: "Колея это только моя, выбирайтесь своей колеёй". В. Высоцкий.
1
|
|||||||||
|
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||||||||||
| 01.12.2012, 20:04 [ТС] | ||||||||||||||
0
|
||||||||||||||
| 01.12.2012, 20:23 [ТС] | |
|
Не по теме: Прошу прощения, кавычки в коде пропустил. Не успел исправить.
0
|
|
| 01.12.2012, 20:23 | |
|
Класс, конструктор, деструктор и прочее
Стиль написания кода(читабельность и прочее) Размер примитивных типов, выравнивание и прочее Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|