Newsgroup: it.comp.os.linux.development
Titolo: Stack Size

Come si fa a settare la dimensione dello stack di un programma con il
GCC?
grazie,
CoF.
web-page : 
http://it.geocities.com/cofzompi

 GCC?
Lo  stack e`  teoricamente infinito,  cresce in  base alle  esigenze del
programma.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Windows NT crashed.
I'm the Blue Screen of Death.
No one hears your screams.

programma.
che storia! Grazie!
ciao,
CoF.
web-page : 
http://it.geocities.com/cofzompi

Approposito, sai per caso cosa significa quando un programma termina
in maniera errata e viene stampata automaticamente a video la stringa
"termined" ? Pensavo fosse un overflow dello stack in quanto uso
pesantemente le funzioni ricorsive ma visto che lo stack si
autodimensiona ...
grazie,


 autodimensiona ...
Secondo me tu ti stai riferendo al fatto che la shell periodicamente ritorni 
lo stato di terminazione di tutti i programmi che hai lanciati.
Questo avviene perche' la shell si preoccupa (un buon momento per farlo e' 
quando si preme invio, ovvero quando la linea di comando viene passata 
all'interprete) di controllare lo stato di terminazione di tutti i processi 
lanciati in background da questa: se scopre che qualcuno di questi e' 
terminato ti segnala anche, tra le altre cose, il modo di terminazione 
(calcolato attraverso opportune macro).
Sotto linux fai:
  man -S2 wait
  man -S2 waitpid
per avere informazioni a proposito (nota la variabile status e le macro per 
analizzarne il significato).
-- 
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."

 del programma.
ne sei sicuro?
prova un po' questo, prima con
gcc -o stack -Wall -pedantic stack.c
poi prova ad aggiungere -DONE, poi -DTWO etc etc
a me gia' con 8 mega va in seg fault, e ho 512 MB di RAM...
int main(){
  #define MEGA 1024*1024
  #ifdef ONE
    #define MEMORY 8*MEGA
  #elif defined(TWO)
    #define MEMORY 32*MEGA
  #elif defined(THREE)
    #define MEMORY 128*MEGA
  #elif defined(FOUR)
    #define MEMORY 256*MEGA
  #elif defined(FIVE)
    #define MEMORY 512*MEGA
  #endif
  #ifndef MEMORY
    #define MEMORY MEGA
  #endif
  char p[MEMORY];
  int i;
  for (i = 0; i < MEMORY; ++i)
    p[i] = 0;
  return 0;
}
-- 
#include <stdio.h>/* (C) BW2K+2 This code is released under GPL 2+ */
int main(void){char c[]={98,108,97,107,119,111,108,102,64,116,105,
115,99,97,108,105,46,105,116,32,119,101,98,46,116,105,115,99,97,108,
105,46,105,116,47,98,108,97,107,119,111,108,102,0};printf("%s\n",c);}


Questo dipende dal resource limit impostato dalla shell (con 'ulimit -s' per 
bash o 'limit stacksize' per gli Uomini Veri ;-).
Ciao
  David
-- 
<d.santinoli presso mi. flashnet. it>

 -s' per bash o 'limit stacksize' per gli Uomini Veri ;-).
forse non mi sono spiegato bene (e in effetti e' cosi'):
non si puo' pensare che lo stack sia "infinito": esistono precisi 
limiti, di cui un buon programmatore deve tener conto: nessun sistema 
ben settato permettera' di usare tutta la memoria per lo stack di un 
solo utente, fosse anche root.
quindi un programma non deve assumere di poter settare variabili grandi 
a piacere staticamente, ma farlo dinamicamente.


 programma.
beh volendo fare le pulci c'è il limite dei 32 bit di indirizzamento, no? ;)
-- 
Ciao,
[Resnick]