No se pueden asignar más de un millón de enteros.

Estoy tratando de medir el tiempo y comparar los algoritmos de clasificación. Por lo que entiendo: sizeof(int) es de 4 bytes, por lo tanto, int array[one million]; produce (4) millones de bytes, lo que equivale a 4,000 kb o 4 mb aproximadamente.

Entonces, ¿por qué no puedo? Estoy bastante seguro de que tengo más. 2gb para ser precisos.

Estoy usando gcc si eso significa algo.

No puedes tener tantos enteros en la stack.

Intente asignar espacio en el montón para su matriz.

 int *array = malloc(1000000*sizeof(int)); // if array is not null, then you have an array with 1,000,000 ints. 

Una vez que haya terminado con sus algoritmos de clasificación, libere la matriz:

 free(array); // frees memory allocated before 

Es probable que esté intentando asignarlo en la stack, que es pequeño.

  • Hacer la matriz static o global (lo mismo realmente, pero con diferente visibilidad)

     static int arr[...] 
  • Usar malloc

     int *p = malloc(... * sizeof *p); 

La statement

 int array[one million]; 

declara y almacena su matriz en la stack. El tamaño de la stack de su progtwig es bastante pequeño y no puede contener 1 millón de ints. En su lugar, lo que debe hacer es declarar la matriz en el montón. Para eso, cree un puntero a la matriz y use la función malloc () para asignar memoria. De esta manera, la memoria se asigna en el montón, y tiene mucha más memoria para su utilización.

 int *arrayName = malloc(1000000*sizeof(int)); 

Siempre debe comprobar el puntero para el valor devuelto, ya que el malloc puede fallar, y devolverá un valor NULO. Si intenta acceder a ese puntero, su progtwig terminará abruptamente. Así que asegúrese, para comprobar la asignación correcta.

Además, siempre recuerda

 free(arrayName); 

cuando haya terminado de utilizar la matriz. De lo contrario, puede conducir a una pérdida de memoria, en algunos progtwigs más complejos.

Para una mejor comprensión de las stacks y stacks, consulte esta pregunta: ¿Qué y dónde están la stack y la stack?

Se recomienda encarecidamente que las variables de gran tamaño deben ir al montón a través de malloc o new . Sin embargo, aún puede tener una matriz tan grande en la stack aumentando el tamaño de la stack. Esto suele ser necesario cuando se puede tener una recursión extremadamente profunda.

Linux / gcc tiene el tamaño predeterminado de stack de 8 MB, mientras que Windows tiene 1 MB. El tamaño de la stack puede boostse al ajustar las opciones del enlazador o los binarios.

[EDITADO] Por ejemplo, puede boost el tamaño de stack en gcc:

gcc -Wl,--stack,16777216 hello.c ( Esto es solo para MigW / cygwin gcc en Windows )

Por lo tanto, la stack será de 16MB.

Además, el tamaño de la stack se puede modificar mediante el comando ulimit por like (esta es la forma más fácil en Linux):

ulimit -s 16777216

Tenga en cuenta que ulimit -s le dará el tamaño actual de la stack.

Finalmente, puede llamar a setrlimit en su progtwig.