No hay una manera portátil. Sin embargo, hay algunas soluciones no portables.
En primer lugar, como otros han mencionado, no estándar de Windows proporciona un marco __try
y __except
llamada Structured Exeption Handling (your specific answer está en la base de conocimientos).
En segundo lugar, alloca
- si se aplica correctamente - puede decir si la pila está a punto de desbordarse:
bool probe_stack(size_t needed_stack_frame_size)
{
return NULL != alloca(needed_stack_frame_size);
};
me gusta este enfoque, porque al final de probe_stack
, la memoria asignada alloca
se libera y disponible para su uso. Desafortunadamente, solo unos pocos sistemas operativos implementan correctamente el alloca
. alloca
nunca devuelve NULL
en la mayoría de los sistemas operativos, lo que le permite descubrir que la pila ha desbordado con un choque espectacular.
En tercer lugar, los sistemas de tipo UNIX a menudo tienen un encabezado llamado ucontext.h
con funciones para establecer el tamaño de la pila (o, de hecho, para encadenar varias pilas). Puede hacer un seguimiento de dónde se encuentra en la pila y determinar si está a punto de desbordarse. Windows viene con capacidades similares a laCreateFiber
.
A partir de Windows 8, Windows tiene un function specifically for this (GetCurrentThreadStackLimits)
enviar el código? Use Lint para el análisis estático –
He agregado el "¿cómo?" pregunta de seguimiento porque de lo contrario, esta es solo una pregunta sí/no que no es muy interesante o útil. La porción * how * es lo que hace que esta sea una pregunta útil. –
No transportable, no. ¿Estás buscando una respuesta para un sistema operativo específico? –