· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Генерация кода для локальных переменных

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Сен 11, 2003 01:19:55

Всё работает!
00401000 81 EC 00 10 00 00    sub         esp,1000h

00401006 6A 00                push        0
00401008 8D 44 24 04          lea         eax,[esp+4]
0040100C 6A 00                push        0
0040100E 50                   push        eax
0040100F 6A 00                push        0
00401011 C6 44 24 14 41       mov         byte ptr [esp+14h],41h
00401016 FF 15 B0 60 40 00    call        dword ptr ds:[4060B0h]

0040101C 81 C4 00 10 00 00    add         esp,1000h
00401022 C3                   ret


Дата: Сен 11, 2003 05:03:05

Рухнет все если esp будет казать на самую вершину стэка, уже трактат сюда вкололил, но он чета на форум не добавился :( Переписывать не буду, так что вкратце:
Так что рекомендую почитаь про организацию стэка под виндой - как поймете что через границу страницы (4кб) шагать не следует, так сразу просечете зачем нужна эта функция.


Дата: Сен 11, 2003 17:46:35

Каким образом всё рухнет, если указать в STACKSIZE commited=reserved ?
Или я всё-таки чего-то не понял?..
==
Вчера я нашёл неплохую статью в MSDN (линк - см. выше).
Там сказано, что проблема возникнет только если шагнуть за PAGE_GUARD.
Если указать, что commited=reserved=256Kb, тогда PAGE_GUARD будет в самом конце 256Kb-ного участка.
===
И я уверен, что мой стэк не будет больше чем 256Кб.
Кроме того, можно сделать обьект, который следит за ESP, и
если до верха осталось, например, 4 страницы, он выдаёт ASSERT().


Дата: Сен 11, 2003 18:08:47

AsmGuru62
Если вы шагнёте на диапазон в две страницы то бряк точно будет.
Проблема возникнет если шагнуть и на PAGE_GUARD.

В данном случае я просто делаю два sub, вместо одного.
Но С++ использует более извращённый способ. :)


Дата: Сен 11, 2003 18:14:27

From MSDN:
---
'To suppress all __chkstk() calls, specify an artificially high threshold value such as /Gs999999. The /Gs0 option has the same function as the /Ge option and instructs the compiler to call __chkstk() in every function. It might be advantageous to change the default value if the code executes in an environment where the stack is fully committed.'
---
Так всё же: если STACKSIZE 256Kb,256Kb - то PAGE_GUARD будет в самом конце или нет?
---


Дата: Сен 11, 2003 20:04:32

AsmGuru62

А возьми вьювер памяти да посморти. В айсе команда есть. И нечего их тут всех слушать. Умные больно ;))))))


Дата: Сен 12, 2003 10:41:05

Если верить Рихтеру (я, лично, ему верю), то под NT при полностью заполненном стеке сторожевая страница пропадает, а самая нижняя страница будет зарезервирована, а не выделена. Под 9х там более хитро. Почитай Рихтера - у него целый раздел есть "Стек потока" - там объясняется почему это так.

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.061