avva: (Default)
[personal profile] avva
(эта запись будет интересна программистам, знающим C, и сочувствующим)

Две задачки - первая старая и известная, вторую только что придумал.

1. Напишите код на C, который определяет, в какую сторону растет стек на машине, где его запустили - вверх или вниз.

2. Напишите код на C, который проверяет, кто очищает стек от аргументов в конце работы функции - сама функция или тот, кто ее вызывает, после ее возвращения.

Обратите внимание, что обе задачи можно решить многими способами; интересней придумать решения, которые делают - по возможности, т.к. совсем без этого не обойтись - меньше предположений о том, как ведут себя компилятор и железо.

Комментарии скрывать не буду. Очень рекомендую подумать самому перед тем, как смотреть на решения там.

Date: 2009-09-17 12:24 pm (UTC)
ext_475885: (Default)
From: [identity profile] brewbuilder.livejournal.com
C предусматривает, что вызов функции может быть откомпилён без прототипа,
т е функция не знает сколько аргументов ей реально переданно
(а есть и функции с переменным числом аргументов). Конечно, можно
сделать реализацию, в которой информация нужная для очистки стека
от аргументов будет передаваться в функцию, но на практике, это усложнение
которе не дает ни каких перимуществ, и таких реализаций скорее всего нет
(если не согласны, укажите ссылку на такую реализацию).

Что касается stdcall, он имеет преимущество во всех тех случаях,
когда вызов происходит через RPC и надо организовать marshaling
(что нужно для OLE2, например). Ключевое слово __stdcall пишется
с одним или двумя андерскорами, поскльку это расширение C.

Date: 2009-09-17 05:57 pm (UTC)
From: [identity profile] cema.livejournal.com
Если сказать вежливо, то ваше понимание вопроса широкое, но не глубокое.

Date: 2009-09-17 06:16 pm (UTC)
ext_475885: (Default)
From: [identity profile] brewbuilder.livejournal.com
Что есть глубокое понимание данного вопроса?
Вот моё понимание вопроса позволило мне в 94 году написать
свертку стека для C++ компайлеров которые обработку исключений
не поддерживают, а ваше глубокое что вам позволяет?

January 2026

S M T W T F S
    1 2 3
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 4th, 2026 07:38 pm
Powered by Dreamwidth Studios