|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Evgeny Sharandin 2:5020/755.12 10 Jan 2002 21:06:00 To : Andrew Ezhguroff Subject : Гоpодская олимпиада по инфоpматике -------------------------------------------------------------------------------- Привет Andrew! 08 января 2002 года (а было тогда 05:44) Andrew Ezhguroff в своем письме к Andrey Tarasevich писал: AT>> опитмизируемый момент. Качественный компилятор сведет этот AT>> накладной расход к нулю. AE> ИМХО, все несколько сложнее. Ведь существует рекурсия (и прямая и AE> косвенная). Поэтому для каждой подпрограммы придется организовывать AE> свой стек кадров (скорее это будет единый стек, в котором для каждой AE> подпрограммы будет вестись свой список активаций). Это общечеловеческое требование, реализация которого зависит от конкретных особенностей процессора (о каком стеке можно говорить на компьютерах, не поддерживающих аппаратный стек вообще?) и представлений разработчиков компиляторов, но не от языка программирования. Твое же предложение работы со стеком крайне криво и не эффективно, видимо поэтому никто так и не поступает ;) AT>> В Си это накладной расход присутствует _в_ _точности_ в той же AT>> мере, ибо отсутствующую функциональность приодится реализовывать AT>> руками. AE> Глобальные и статические переменные в Си - это фиксированные участки AE> памяти, адреса которых неизменны и известны до начала выполнения AE> программы. Так что доступ к ним осуществляется максимально эффективно. Ровно это же наблюдается в Паскале или Фортране. AT>> Ты хочешь сказать, что эффективность С обуславливается именно AT>> наличием глобальных переменных? AE> Hет. Я показываю один из механизмов, который в Си реализован заведомо AE> эффективнее, чем в Паскале. Что, доступ к глобальным переменным? И чем же он отличается от такового в Паскале? AE> Глобальные и статические переменные используются в Си очень активно. AE> И, кстати, в Паскале нет прямого аналога статическим переменным (опять AE> приходится эмулировать их через переменные охватывающей подпрограммы). Есть и глобальные, и статические. AE> К тому же проблемы все равно не решит: в Паскале "глобальная" AE> переменная - это смещение от границы кадра, а в Си - абсолютный адрес. А можешь ли ты дать ссылку в стандартах С или Паскаля, где это бы оговаривалось. Уверен, что нет - потому как там подобные требования отсутствуют. AE> Поэтому если Z - глобальный массив, то на Паскале Z[10] требует AE> вычисления адреса на этапе выполнения, а Z[10] на Си вычисляется на AE> этапе компиляции. Это зависит от конкретного компилятора и используемых ключей оптимизации. Я тебе могу привести примеры скомпилированного кода, где все будет с точностью до наоборот. С уважением, Evgeny 10 января 2002 года --- * Origin: LID (2:5020/755.12) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/39153c3df4b9.html, оценка из 5, голосов 10
|