задачки про стек (программистское)
Sep. 17th, 2009 12:19 pm(эта запись будет интересна программистам, знающим C, и сочувствующим)
Две задачки - первая старая и известная, вторую только что придумал.
1. Напишите код на C, который определяет, в какую сторону растет стек на машине, где его запустили - вверх или вниз.
2. Напишите код на C, который проверяет, кто очищает стек от аргументов в конце работы функции - сама функция или тот, кто ее вызывает, после ее возвращения.
Обратите внимание, что обе задачи можно решить многими способами; интересней придумать решения, которые делают - по возможности, т.к. совсем без этого не обойтись - меньше предположений о том, как ведут себя компилятор и железо.
Комментарии скрывать не буду. Очень рекомендую подумать самому перед тем, как смотреть на решения там.
Две задачки - первая старая и известная, вторую только что придумал.
1. Напишите код на C, который определяет, в какую сторону растет стек на машине, где его запустили - вверх или вниз.
2. Напишите код на C, который проверяет, кто очищает стек от аргументов в конце работы функции - сама функция или тот, кто ее вызывает, после ее возвращения.
Обратите внимание, что обе задачи можно решить многими способами; интересней придумать решения, которые делают - по возможности, т.к. совсем без этого не обойтись - меньше предположений о том, как ведут себя компилятор и железо.
Комментарии скрывать не буду. Очень рекомендую подумать самому перед тем, как смотреть на решения там.
no subject
Date: 2009-09-17 12:24 pm (UTC)т е функция не знает сколько аргументов ей реально переданно
(а есть и функции с переменным числом аргументов). Конечно, можно
сделать реализацию, в которой информация нужная для очистки стека
от аргументов будет передаваться в функцию, но на практике, это усложнение
которе не дает ни каких перимуществ, и таких реализаций скорее всего нет
(если не согласны, укажите ссылку на такую реализацию).
Что касается stdcall, он имеет преимущество во всех тех случаях,
когда вызов происходит через RPC и надо организовать marshaling
(что нужно для OLE2, например). Ключевое слово __stdcall пишется
с одним или двумя андерскорами, поскльку это расширение C.
no subject
Date: 2009-09-17 05:57 pm (UTC)no subject
Date: 2009-09-17 06:16 pm (UTC)Вот моё понимание вопроса позволило мне в 94 году написать
свертку стека для C++ компайлеров которые обработку исключений
не поддерживают, а ваше глубокое что вам позволяет?