Заблокирован
|
|||||||||||
1 | |||||||||||
Какие конструкции C++ выполняются не там, где написаны?14.08.2009, 23:29. Показов 1571. Ответов 13
Метки нет (Все метки)
Какие конструкции C++ выполняются не там, где написаны?, Я насчитал пока 2 варианта. Подскажите какие есть ещё.
№1.
0
|
14.08.2009, 23:29 | |
Ответы с готовыми решениями:
13
такая проблема: дома 2 компъютера , один с Windows Vista, другой с Windows XP. Там, где Vista - интернет работает как часы, а там, где ХР - интернета Какие серьезные программы написаны на Fortran Какие известные программы написаны на чистом C и на С++ ? В чём ошибка.В коде там где коментарий там ошибка поучается. |
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
|
|
14.08.2009, 23:47 | 2 |
По №1 - читай Стандарт, 6.5.3/1, там абсолютно четко все описано. Не вижу в твоем постинге никаких противоречий требованиям Стандарта.
По №2 - зависит от компилятора. Стандарт не устанавливает никаких требований к моменту выделения памяти под локальную переменную. Таким образом, описанное тобою поведение компилятора никоим образом не противоречит требованиям Стандарта. Мне приходилось встречаться с разными компиляторами, и, уверяю тебя, момент выделения памяти под переменную с сильно зависит как от конкретного компилятора, так и от типа сборки (дебаг/релиз) и от ключей оптимизации компилятора. Ну и что? При чем здесь "где написаны" конструкции?
0
|
15.08.2009, 00:12 | 3 |
понимаю, каждому хочется открыть свою планету. но неоткрытые - далеко или очень далеко.
"реально оператор i++ из заголовка цикла for"... выполняется между двумя плюсами после i "// Реально память под переменную c выделяется тут, "... а точнее - между двумя косыми комментария.
0
|
Заблокирован
|
|
15.08.2009, 00:21 [ТС] | 4 |
А я разве говорил, что о противоречиях стандарту?
Прочитайте внимательней название темы. Добавлено через 1 минуту 57 секунд Причём тут "планеты"? Я задал конкретный вопрос и огласил свою просьбу.
0
|
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
15.08.2009, 00:43 | 5 |
тебе сказали, что определить заведомо где произодйет выделение под память нельзя. все зависит от компилятора, и кокретного балда (дебаг может в разных местах создавать перменную).
0
|
Заблокирован
|
|
15.08.2009, 00:48 [ТС] | 6 |
0
|
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
|
|
15.08.2009, 01:19 | 7 |
По примеру 1 могу сказать,что сначала выполняется тело цикла,и сразу после него инкремент.Конкретно в инструкции for так.А по второму не тут и там,а важно,как работает компилятор.Может быть сначала проверяется синтаксис и резервируются переменные,а то что уже видишь ты-это выполнение уже после резервирования переменных.Это надо конкретно смотреть исходники компилятора или читать доку,как там точно всё.Интересно,с чего ты сделал такой вывод,что память резервируется "там,а не там"?
0
|
Заблокирован
|
|
22.08.2009, 02:51 [ТС] | 8 |
0
|
640KB мне хватило на всё.
119 / 50 / 3
Регистрация: 07.06.2009
Сообщений: 442
|
|
22.08.2009, 03:26 | 9 |
Вообще-то все операторы написаны на моём мониторе, а выполняются в процессоре (и кажется не моего компутера).
Сопоставлять текстовое представление исходного и исполняемого кодов - глупость.
0
|
Любитель давать советы
342 / 135 / 14
Регистрация: 12.01.2009
Сообщений: 511
|
||||||
22.08.2009, 06:37 | 10 | |||||
Лично я встречал такую реализацию:
0
|
22.08.2009, 11:44 | 11 |
По поводу for - читай книжки, там всё написано
По поводу выделения памяти - в момент вхоа в процедуру сразу выделяется регистровое окно для ВСЕХ переменных процедуры (независимо от того, на каком уровне вложенности описана переменная). Теоретически старые компиляторы могли заниматься расширением стека на каждый новый лексический блок, но современные с вероятностью 99.99% всю _статически_ известную стековую память выделяют при входе в процедуру (массив с переменным числом аргументов НЕ относится к этому случаю). Т.е. автор по сути дела правильно написал мысль "Реально память под переменнЫЕ c выделяется тут, а не ниже, где описание" но выразил её слишком коряво Alexiski, конструктор НЕ занимается выделением памяти. Контсруктор занимается ТОЛЬКО инициализацией полей
0
|
Любитель давать советы
342 / 135 / 14
Регистрация: 12.01.2009
Сообщений: 511
|
|
23.08.2009, 22:13 | 12 |
Массив с переменным числом аргументов в стековой памяти? Вы ничего не путаете?
Upd. Понял, вероятно Вы имеете ввиду массивы из вложенных блоков. Собственно, и я об этом же, только другими словами, разве нет? Конструктор НЕ занимается выделением памяти, согласен Конструктор занимается ТОЛЬКО инициализацией полей ПОСЛЕ выделения памяти. Следовательно, на момент вызова конструктора память должна быть УЖЕ выделена. Таким образом, фиксация момента вызова конструктора задает одну из границ диапазона, в котором компилятор обязан выделить память. Что я и пытался написать. Но мне показалось, что весь этот ход рассуждения достаточно очевиден, и его не обязательно приводить столь подробно..
0
|
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
24.08.2009, 18:21 | 14 |
Какая-то тема очень мутная и непонято о чем.
Если хотите обсуждать конструкторы - создайте новую тему.
0
|
24.08.2009, 18:21 | |
24.08.2009, 18:21 | |
Помогаю со студенческими работами здесь
14
Какие действия обычно выполняются в «прологе» подпрограммы? Какие три операции выполняются при while(*str++)? Проверить. какие аксиомы метрического пространства выполняются Какие управляющие конструкции включает в себя язык С++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |