[Tech] Massima allocazione array

Simone Piccardi piccardi@firenze.linux.it
Mer 2 Set 2009 18:28:19 CEST


Tommaso Biancalani - Llewlyn wrote:
> Ciao a tutti,
> su una ubuntu col gcc 4.3.3 sto cercando di scrivere un programmino che
> tra le tante belle cose deve allocare un bel pò di memoria per farci
> qualche conto, il problema è sui limiti di allocazione. Allocare
> staticamente un
> 
> int vet[3000000]; // ~ 3*10^6
> 
Questi vanno nello stack.

piccardi@ellington:~$ ulimit -a | grep stack
stack size              (kbytes, -s) 8192

per cui se allochi piu` di 2072576 interi vai in stack overflow di
brutto (e ti becchi il sigsegv). Su puo` alzare (man setrlimit).

> è sufficiente a mandare in segmentation fault ogni cosa. Se lo alloco
> chiamando una malloc riesco a superare questa limitazione (xchè?), ad
> esempio:
> 
> int *b;
> b = (int *)malloc(sizeof(int)*1000000000); // 10^9
> 
Questi vanno nello heap.

Qui il limite e` dato dallo spazio di indirizzi disponibile. A 32 bit
sono 4Gb del tutto teorici, in realta` hai meno spazio (se ricordo bene
da 0x08000000 a 0x0c000000).

Ciao
Simone



Maggiori informazioni sulla lista flug-tech