Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

134
Vistas
¿Pila desbordante con una enorme variable local?

Como se dice, se le dan 8 mb de pila a cada proceso. Esta pila se utilizará para almacenar variables locales. Entonces, si tomo una matriz de tamaño máximo que la pila, ¿debe desbordarse?

 int main() { int arr[88388608]; int arr1[88388608]; int arr2[88388608]; while(1); return 0; }

¡Pero no puedo obtener el resultado!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

¡Bienvenido al mundo de la optimización de compiladores!

Debido a la regla como si, el compilador solo necesita construir algo que tenga los mismos resultados observables que su código original. Así que el compilador es libre de:

  • eliminar las matrices no utilizadas
  • eliminar el bucle vacío
  • almacene las matrices dinámicas de main fuera de la pila, porque main es una función especial que el entorno debe llamar solo una vez

Si desea observar el desbordamiento de la pila (el malo, no nuestro buen sitio :-)), debe:

  • use algún código para llenar las matrices
  • compilar con todas las optimizaciones eliminadas y preferiblemente en modo de depuración para decirle al compilador que haga lo que escribí con la mayor precisión posible

El siguiente código hace SIGSEGV con CLang 3.4.1 cuando se compila como cc -g foo.c -o foo

 #include <stdio.h> #define SIZE 88388608 void fill(int *arr, size_t size, int val) { for (size_t i=0; i<size; i++) { arr[i] = val; } } int main() { int arr[SIZE]; int arr1[SIZE]; int arr2[SIZE]; fill(arr, SIZE, 0); fill(arr1, SIZE, 0); fill(arr2, SIZE, 0); printf("%d %d %d\n", arr[12], arr1[15], arr2[18]); return 0; }

e incluso este código funciona bien cuando se compila como nivel de optimización -O2 ... Los compiladores ahora son demasiado inteligentes para mí, y no soy lo suficientemente valiente como para mirar detenidamente el código ensamblador, que sería la única forma real de entender lo que realmente es ¡ejecutado!

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda