Ещё одна причина, почему не следует разбазаривать свободное место в стеке.
? Microsoft, ?? ??????? ????, ? ??? ??? ?????, ??? ????????????? Windows, ?????? ??????? ????????? ??????? ??????? ???????, ????? ? ?????? ?????. ?????????????? ????? ??? ??????? ???????????? ? ????????. ???? ????? ???? ???????? ??????????????? ????????, ?? ?????? ?? ????? ??????? ???????? crash dump ??? ????? ?????? ????????? – ??? ?????????? remote. ???????? ?????????? ?? ??????? «remote.exe», ??????? ???? ? ????????? ? «WinDbg.exe» ? ??????, ? ?????-??, ???? ?????, ??? ? Telnet, ?? ????? ??????????? ????? (named pipes). ?? ??????????? ????, ?????? ?????? ???? ???????????? ??? ?? Telnet. ??? ???? ??? ???? ???????. ?? ? ?????????? ?? ????.
??? ???, ?????????? ????????????? ?????????? ???????????? ???????? ? ????, ??? ??????????? ????? ???????, ?? ??????????? ?????? ?? ??????? ?? ?????????? ?????, ????? ????????? ???????? ? ???????? ????????? ?????? ????????. ??????????? ?? ??? ?????? ????????? ??????? “!analyze –v”. ?????? ???? ?????? ???????? ?????????? “!analyze –v” ????? ?????????? ????????? ????? ???? ?? ??????????? ????? ? ?? ???? – ?????????? ????????? ????. ???????? ??? ?????? ???????, ??? ??? ???????? ?????? ????????? ??????.
?????? ???????????, ??? ?? ????? ???????????? ???????, ???????, ????????, ????????? ????????? ????? ? ?????:
void GreedyBastard()
{
char buffer[0x10000]; // 64K is enough for anyone.
…
}
??????????? ?????, ??? ??????? ????????? ?????????, ? ??? ????????????? ????????? ? ?????? ?????? ???????. ??? ??????????, ???? ???? ??????? ?????? ?????????? ??????????? ?? ??????? ???????? ??? ?????? ? ?????? ????? ? ???, ??? ???? ??????? ??????????? ????. ?????????? ????? ????? ??? ????, ??? ??????? ????? ?????????? ?????????? ???? ???????. ??? ???? ????? ????? ????? ?? ??????? ?? ???????????? ????? ???????. ???? ???? ?? ???? ????????, ??? ???????? ???????????? ????????? ???? ?? ?????. ??? ?? ????, ??? ?? ????? ?????????? ??????? ?? ??? ????? ????? ?? ???????. ??????????? ??????? «??? – ?? ???» ? ???? «?? ???», ?? ????? ???????????? ????, ??? ??? ????????? «!analyze -v». ??? ??? ???? ??? ??????, ?? ??? ???????? ??????????. :-)
Cross-posted from blog.not-a-kernel-guy.com.
Comments
Anonymous
January 01, 2003
> А в 64-бит ситемах 64к буфер в стеке все еще проблема? Зависит от того, о какой функции одет речь. Для некоторых и 4K проблема. > И как происходит переполнение стека в 32-бит? В смысле? Бросается исключение "stack overflow" или "access denied" - в зависимости от того, как именно переполнился стек. > Есть ли отличия в схеме проблемы в зависимости от того, где эта "много-жрущая" функция находится: в kernel-space, user-space или гипервизоре? Конечно. Размер ядерного стека - 6K по умолчанию. Вляд ли стек в гипервизоре больше. Да и в user space далеко не всегда можно позволить себе откушать 4KB. Хотя обычно - можно. > И оптимальный способ выделения памяти в каждом случае свой или есть общие рекомендации? Обычно в каждом случае - свой. В процессе работы обычно вырабатывается интуитивный критерий - сколько можно, а сколько - нет. Чаще всего проблема даже не в самом размере, а в том, что размер фиксированный там где нужен динамический буфер.Anonymous
December 16, 2008
Здравствуйте. А в 64-бит ситемах 64к буфер в стеке все еще проблема? И как происходит переполнение стека в 32-бит? Есть ли отличия в схеме проблемы в зависимости от того, где эта "много-жрущая" функция находится: в kernel-space, user-space или гипервизоре? И оптимальный способ выделения памяти в каждом случае свой или есть общие рекомендации?