Newsgroup: it.comp.lang.c
Titolo: Stack Overflow

Scusate, ho un programma in C, fatto per motivi di studio (studio
Fisica), che mi si blocca per il motivo d'oggetto.
Visto che non sono un programmatore, e il programma deve girare solo
sul mio computer per fare un calcolo, non mi sono andato ad impelagare
in una gestione pulita della memoria ed ho organizzato tutto in array.
Il programma gira bene, ma necessita di molti "numeri" se voglio fare
i conti con una buona approssimazione. Mi servono almeno 6 array da
20k double. Pero' ho notato che quando assegno al programma piu' di un
totale di 100k double si blocca appunto per Stack Overflow.
Uso MVS 6.0 per compilare.
Come posso fare per spiegare al programma (o al compilatore, non so di
chi sia la colpa) che deve assegnarmi quanti double voglio, visto che
il padrone sono io, la RAM la pago io, e ne faccio quello che voglio?
:-)
Grazie mille per le eventuali risposte.
--
-Thanatos-
HatTrick: bobon123 - Djiins, V.167
--
-Thanatos-
HatTrick: bobon123 - Djiins, V.167

 Grazie mille per le eventuali risposte.
non so se puoi aumentare lo spazio assegnato allo stack, però puoi ovviare
al tuo problema utilizzando l'heap no ?
Usa malloc(), e piazza nell'area di memoria che ti restituisce i tuoi dati
Ciao
Matic

Usa malloc(), e piazza nell'area di memoria che ti restituisce i tuoi dati
Scusa, come detto non sono un programmatore, uso il C per fare
esclusivamente progetti a mio uso e consumo, essenzialmente al fine di
fare calcoli (lo trovo migliore del Fortrand per quello di cui ho
bisogno, e programmi appositi come Mathematica non sono
sufficientemente customizzabili).
Non so cosa sia l'heap, mi potresti consigliare un tutorial su inet
che ne spieghi il funzionamento?


 sufficientemente customizzabili).
Non serve che ti studi l'heap, basta leggersi come si usa malloc.
malloc(n) riserva una memoria di N bytes, e ritorna un puntatore alla
memoria riservata ( e' un void*).
In pratica fai:
double *array;
int n;
n = 100000;
array = malloc(n*sizeof(double));
e poi accesi come un vettore, con array[0] , fino a array[99999] , alla fine
del programma ricorda sempre un `free(array)` in modo da rilasciare la
memoria che avevi riservato.
-- 
Qualsiasi - Linux Registered User
"We all know Linux is great...it does infinite loops in 5 seconds." Torvalds
http://www.gnu.org/philosophy/no-word-attachments.it.html

 sufficientemente customizzabili).
Personalmente, penso che tu dovresti almeno conoscere tutti gli aspetti del
linguaggio che usi. Se poi non li sai usare amen, ma almeno dovresti averne
coscienza. Ti sara' utilissimo per qualsiasi lavoro tu vorrai mai fare,
anche solo per tuo divertimento.
Anche se il C ti permette di fare tutto quello che ti serve, non e' il
massimo per le tue necessita'.
Il Fortran e' un portento per i calcoli matematici (praticamente e' l'uso
principale) anche se non e' il massimo e se non vuoi usarlo non ti biasimo
certo :)
Per piccoli progetti personali come i tuoi, piuttosto che Mathematica
(seppur eccellente), hanno creato apposta Matlab (windows) e Octave (Linux,
Unix vari)? Io li ho usati per un corso di Calcolo Numerico e mi sono
trovato bene.
Alcune caratteristiche per cui penso che per te siano meglio:
- altamente personalizzabili, ti definisci tutte le funzioni e i moduli che 
  ti pare, come in C
- sintassi semplice, non cosi' tanto dissimile dal C, dinamicamente tipati 
  anche se con controlli deboli sui tipi (non il massimo come accoppiata, ma 
  tant'e'), e gestione automatica della memoria da parte dell'interprete... 
  detto ad uno che non capisce moltissimo di programmazione: tu pensa solo 
  al programma, lui cura tutti i dettagli del caso.
- ampia libreria matematica (sono fatti apposta, ci mancherebbe ancora 
  che non fossero provvisti);
- librerie carine, tipo quella per la gestione dell'aritmetica in precisione 
  arbitraria;
- possibilita' di generare grafici senza fatica, anche di funzioni 
  complesse;
-- 
Mox
"Trust the programmer."
"Don't prevent the programmer from doing what needs to be done."
"Keep the language small and simple."
"Provide only one way to do an operation."

trovato bene.
Yes, li conosco benino.
Purtroppo per il genere di conti di cui mi occupo sono troppo
vincolati alle leggi della matematica classica, in C o piu' liberta'
di azione.
Grazie mille a tutti del tempo concessomi.
