Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

137
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!