2010-03-19 16 views

Respuesta

9

Si bien no hay una API para averiguar el tamaño de la pila directamente, el espacio de direcciones virtuales contiguos debe reservarse hasta el tamaño máximo de la pila; es solo que una gran cantidad de ese espacio no está comprometido todavía. Puede aprovechar esto y hacer dos llamadas al VirtualQuery.

Para la primera llamada, pase la dirección de cualquier valor en la pila para obtener la dirección base y el tamaño, en bytes, del espacio de la pila comprometida. En una máquina x86 donde la pila crece hacia abajo, resta el tamaño de la dirección base y VirtualQuery nuevamente: esto te dará el tamaño del espacio reservado para la pila (suponiendo que no estás precisamente en el límite del tamaño de la pila en ese momento)) Sumar los dos naturalmente le da el tamaño total de la pila.

+1

Más información aquí: http://stackoverflow.com/questions/1740888/determining-stack-space-with-visual-studio/1747499#1747499 – Philip

6

Puede obtener el tamaño actual confirmado desde la parte superior e inferior en el TEB. Puede obtener la reserva inicial del proceso y los tamaños de compromiso a partir del PE header. Pero no puede recuperar los tamaños reales pasados ​​a CreateThread, ni hay ninguna API para obtener el tamaño restante de reservado ni comprometido de la pila actual, consulte Thread Stack Size.

Cuestiones relacionadas