una todas tipos programacion parametros llamar las funciones funcion estructura ejemplos declara con como c++ c data-structures stack

c++ - todas - ¿Tamaño máximo de pila para el programa C/C+?



tipos de parametros en c++ (4)

¿Cuál es el tamaño máximo de la pila?

Depende de la implementación. Uno a unos pocos megabytes es típico en PC hoy en día.

¿Es fijo para cada programa / computadora?

Normalmente se fija en la vinculación pero el estándar no define que lo sea. Algunos sistemas operativos también pueden limitar la pila durante el tiempo de ejecución ( RLIMIT_STACK en linux, por ejemplo).

¿Se puede aumentar?

Puede ser posible dependiendo de la implementación. Consulte la documentación de su enlazador para más detalles. Y posiblemente la documentación para el sistema operativo y el formato ejecutable también.

Debes asignar grandes arreglos como ese dinámicamente.

He intentado el siguiente programa. La intención por la cual se creó este programa es descubrir más sobre los tamaños de pila.

int main() { int nStack[100000000]; return 0; }

Después de ejecutar el código anterior, el programa se bloquea debido a la enorme asignación de tamaño de pila. ¿Cuál es el tamaño máximo posible de la pila? ¿Es fijo para cada programa / computadora? ¿Se puede aumentar?

Quiero saber por el bien del conocimiento. Si alguien puede proporcionar ejemplos en C / C ++, sería muy útil.


Para cambiar el tamaño de la pila asignada para el subproceso principal generado por el cargador de procesos para ejecutar el código en su punto de entrada, consulte la documentación del vinculador. También es posible editar ese tamaño de pila en los metadatos del encabezado ejecutable.


Para las aplicaciones basadas en Linux, podemos usar las API getrlimit y setrlimit para conocer varios límites de recursos del kernel, como el tamaño del archivo del núcleo, el tiempo de la CPU, el tamaño de la pila, los valores agradables, máx. no. de procesos, etc. ''RLIMIT_STACK'' es el nombre de recurso para la pila definida en el kernel de Linux. A continuación se muestra un programa simple para recuperar el tamaño de la pila:

#include <iostream> #include <sys/time.h> #include <sys/resource.h> #include <errno.h> using namespace std; int main() { struct rlimit sl; int returnVal = getrlimit(RLIMIT_STACK, &sl); if (returnVal == -1) { cout << "Error. errno: " << errno << endl; } else if (returnVal == 0) { cout << "stackLimit soft - max : " << sl.rlim_cur << " - " << sl.rlim_max << endl; } }


Probé el siguiente programa.

int main() { int nStack[519492]; cout<<"Okay!"; return 0; }

La salida:

Okay!

Pero si incremento el tamaño de la matriz en 1 byte, el programa se bloquea.

int main() { int nStack[519493]; cout<<"Okay!"; return 0; }

Salida:

No output. Program crashes.