trent wrote: > This is because PyOS_CheckStack seem to *never* fail on Win64. Three > possibilites: > (1) I don't understand the PyOS_CheckStack code or I am misintepreting the > problem. > (2) The semantics of _alloca() has changed for Win64 such that a stack > overflow exception is no longer thrown if space cannot be allocated. > NOTE: I changed the number of pointers allocated in PyOS_CheckStack > from 2048 to over 1 *Tera*byte and it *still* did not fail. me again: didn't read the note carefully enough, so I didn't quite figure out what you said... ::: what happens if you run this program (on my win95 box, it counts up to 8, and stops). #include <malloc.h> #include <excpt.h> int __inline PyOS_CheckStack() { __try { _alloca(100000); return 0; } __except (EXCEPTION_EXECUTE_HANDLER) { /* just ignore all errors */ } return 1; } void callme(int i) { char buf[100000]; if (PyOS_CheckStack()) return; printf("%d\n", i); memset(buf, 0, sizeof buf); callme(i+1); } int main() { callme(0); } ::: if it goes on and on and on, check the assembler output from this program. (maybe the win64 compiler is smarter than I -- if it realizes that I don't actually use the return value from _alloca, it may of course remove the entire thing...) </F>
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4