[Bulma] Gestió de memòria
JOSEP
jbort en tsc.upc.edu
Mar Dic 11 16:06:01 CET 2007
Toni Pizà escribió:
> Bones! He intentat fer una matriu bidimensional de caracters en C, de
> dimensió 5000 * 5000. Si tan sols faig la declaració i acab el
> programa, funciona bé, per exemple :
>
> 1 #include <stdio.h>
> 2
> 3 #define MAX 5000
> 4
> 5 int main() {
> 6 char matriu[MAX][MAX];
> 7
> 8 return 0;
> 9 }
>
> En canvi, si faig qualsevol cosa, una assignació o una crida a funció,
> després de la delcaració, retorna un core dumped quan l'intent
> executar. Per exemple, si a la linia 7 pos un simple printf("Hello
> world!\n"), rebenta.
>
> Si ajust la mida de la matriu a 2985, a vegades rebenta i a vegades
> s'executa correctament. La màquina té 1 GB de RAM i dos gigas de swap,
> per memòria física no crec que sigui. Sembla un Expedient X :P
>
> Estic fent feina amb una KUbuntu amb kernel 2.6.22-14-generic, la
> versió 2.6.1-1ubuntu10 de libc6-dev, gcc versió 4.1.3 20070929 i el
> següent ulimit :
>
> servoalab:~$ ulimit -a
> core file size (blocks, -c) 0
> data seg size (kbytes, -d) unlimited
> scheduling priority (-e) 0
> file size (blocks, -f) unlimited
> pending signals (-i) 8126
> max locked memory (kbytes, -l) 32
> max memory size (kbytes, -m) unlimited
> open files (-n) 1024
> pipe size (512 bytes, -p) 8
> POSIX message queues (bytes, -q) 819200
> real-time priority (-r) 0
> stack size (kbytes, -s) 8192
> cpu time (seconds, -t) unlimited
> max user processes (-u) 8126
> virtual memory (kbytes, -v) unlimited
> file locks (-x) unlimited
>
> Algú sap que podria ser?? Em té intrigat .. :)
>
>
Si no recordo malament es pq aquesta variable es diensona a l'stack.
(5000*5000) chars *1byte/1char=25.000.000bytes =>
25.000.000/1024=25.000kb (aprox) > 8192 kb ( que tens definits per a
l'stack, ulimit -s)
prova a augmentar les dimensions de l'stack per sobre de les diensions
de la matriu, per exemple en el teu cas "ulimit -s 30000" (>25.000kb)
tembé tens la possibilitat de dimensionar la matriu dinamicament amb un
malloc per exemple , així crec que no utilitza l'stack.
Más información sobre la lista de distribución Bulmailing