2010-02-13 18 views
5

¿Qué es "stack thrash"? O "una pila thrash"? (Dado que no conozco la definición, no estoy seguro si es un término contable o incontable).¿Qué es "stack thrash"?

+0

Esa no es una frase que haya escuchado alguna vez: ¿cuál es el contexto? He escuchado a personas decir que han "destrozado la pila", lo que significa que accedieron a un puntero malo y sobrescribieron parte de la pila, lo que provocó que el programa fallara de forma extraña y emocionante (y difícil de depurar). –

+0

Por lo general he escuchado que se llama "romper la pila". –

+0

trash o thrash ... IMO puede ser algo así como stack smashing.nt sure – sud03r

Respuesta

4

Stacking thrashing es como un montón de thrashing, pero en la pila.

Ahí, eso ya está explicado.

Oh, quieres más detalles ¿eh?

Si emula un procesador basado en pila en un procesador que no sea, está agitando la pila.

Si su código C es malloc y libera todas las demás líneas de código, está agotando el montón.

El problema de la aglomeración de la pila como un problema es que si perfila su código, la CPU gastará prácticamente todo el tiempo en apareciendo y presionando.

Para la agitación de montón que es malloc() & gratis() siendo su # 1 & # 2 funciones más utilizadas.

Ahora algunas CPU's (Rockwell make some) en realidad están optimizadas para ejecutar un lenguaje basado en pila en el hardware.

  • RAM interna que almacena en caché los mejores N kilobtyes de pila dentro de la CPU
  • pocos registros
  • Todas las instrucciones de pila relativa

Curiosamente, la máquina virtual de Java es un modelo basado en la pila.

Al ejecutar una implementación FORTH realmente tonta en hardware x86, se destruirá la pila. El tipo de cosas que podría escribir después de leer las especificaciones de Forth, por lo que emite código de máquina x86 para obtener instrucciones y NO lo optimiza. Forth chicos, me disculpo, sé que sus implicaciones son mucho mejores.

Postscript también está basado en la pila, lo que hace que las primeras impresoras PostScript sean emocionantes: tenían RAM limitada y CPUs lentas: y ejecutaban un lenguaje de agitación de pila. Estoy seguro de que se realizaron muchos esfuerzos en cosas como el Apple Laserwriter original para que funcione mejor. Tenía una CPU Motorola 68000 corriendo a (10 mil) megahercios y 1Mb de ram IIRC.

De nuevo, apilar thrashers.

¿Eso ayudó?

+0

Si vuelvo a encontrar la referencia original, intentaré con esta definición y veré si encaja.Pero ciertamente tiene sentido, acepta que escribí "thrash" y aborda la pregunta y la palabra clave tal como están, y es coherente con la definición en inglés de la palabra. Muchas gracias, Tim. – talkaboutquality

1

Nunca me he encontrado con el término, y los principales éxitos de Google y Wikipedia no lo describen.

Sin embargo, parece ser análogo a disco thrash que es un uso bastante ineficiente de un disco. Eso no es directamente aplicable a una pila, que no corresponde a nada mecánico. Tal vez está relacionado con fallas en la página que daría lugar a una relación mecánicamente ineficiente. O el desbordamiento de la pila corregido por algún costoso recurso ejecutivo/kernel.

Algún contexto para el término ayudaría.

+0

+1 soy generoso ..: P – sud03r

2

He visto este término usado en el contexto de Forth, donde la falta de acceso al marco de pila a veces requiere el uso excesivo de manipulaciones de pila ("sacudir la pila") para llegar a ciertas palabras al principio de la pila.

Además, This glossary lo define como "Expansión frecuente de la pila (desbordamiento) y contracción (subdesbordamiento)". Claramente una definición que necesita una explicación adicional. Quizás alguien más familiarizado con Cray X1 pueda explicarlo.

1

Oí el término "apisonar la pila" en el contexto de los protectores de la pila, pero creo que con más frecuencia se llama "aplastamiento de la pila". Stack smashing significa cualquier clase de vulnerabilidades de pila de explotación (como buffer overflows). Es por eso que la protección de la pila GCC se llama SSP (Stack-Smashing Protector).

+1

"thrash" <> "smash" – talkaboutquality

0

Escuché una vez "destrozar la pila" (sin la primera h) en el sentido de "corromper la pila", p. cuando una función obtiene/pone más bytes de/en la pila de lo que debería, estropeando el puntero de la pila e imposibilitando que la otra función funcione correctamente después.

Puede suceder cuando llama a una función externa con una convención de llamada incorrecta (por ejemplo, cuando una función en un dll es stdcall pero la declara como cdecl) o cuando llama a una función variadica como printf o scanf formato de cadena, por lo que aparece más/menos bytes de lo que podría.

+0

"thrash" <> "trash" – talkaboutquality

+0

Lo sé, pero como nunca lo escuché, pensé que tal vez lo había escuchado mal . –

1

Estoy seguro de que el término es totalmente coloquial y no tiene un significado preciso. ¿Tiene una cita o un enlace específico donde lo haya visto usar?

Sin ninguna definición técnica precisa, sugiero que significa lo que el usuario del término crea que significa. Podría suponer que se aplicará a cualquier tipo de abuso o uso ineficaz de una pila, pero dado que todo lo que suele suceder en una manipulación de pila es que el puntero de la pila se mueva sería difícil definir lo que constituiría 'basura' que no era simplemente comportamiento normal y deseable.

En una aplicación de subprocesos múltiples donde cada subproceso tiene su propia pila, la conmutación de contexto implicaría una conmutación rápida de las pilas también, pero ese evento se describe completamente y menos ambiguamente con el término "desbordamiento de tarea".