DISEGNARE RECORD DI ATTIVAZIONE SULLO STACK

di il
2 risposte

DISEGNARE RECORD DI ATTIVAZIONE SULLO STACK

Ciao ragazzi..
avrei bisogno di una mano a capire questa cosa..
devo disegnare il record di attivazione sullo stack di questa funzione..
puntElenco InserisciElementoInLista(puntElenco L,char*parola){
   puntElenco q=L, prec;
   int PosTrovata=0;
   if(q==NULL){        // lista vuota
      q=inserisci(L,parola);
      return(q);
   }
   
   //lista con una parola con inseriemnto in testa
   if(strcmp(q->info,parola)>=0){ 
      q=inserisci(L,parola);
      return q;
   }
   //lista con almeno una parola, più inserimento dopo la prima parola
   while (q!=NULL && (PosTrovata==0))
   {
      if(strcmp(q->info,parola)<0)
      {
         prec=q;
         q=q->next;
      }
      else
         PosTrovata=1;
   }
   prec->next=inserisci(q,parola);
   return (L);
}
solo che come materiale, ho a disposizione questa unica cosa molto semplice

ho letto molto da internet su questo argomento..ma sembra che quello che devo fare io sia molto più semplice..con la mia funzione voi che fareste?

2 Risposte

  • Re: DISEGNARE RECORD DI ATTIVAZIONE SULLO STACK

    Ciao milu,

    devi disegnare il frame come nell'esempio che riporti. Si, è semplice nell'esempio, ma nella realtà le cose sono differenti... ma tu ovviamente devi seguire il tuo pseudo schema.

    Nella realtà le cose sono ben diverse... nella sezione parametri il C++ aggiunge l'ggetto, nelle variabili locali si usano i registri disponibili.... insomma bisogna conoscere l'architettura, il sistema, il compilatore.
    Prendi questo semplice esempio:
    
    #include <stdio.h>
    unsigned long get_sp(void)
    {
      __asm__("movl %esp, %eax");
    }
    
    void try ()
    {
      char *s="Hello World";
    }
    int main ()
    {
        unsigned long SP=get_sp();
        try ();
        printf ("s=%s\n",*((&SP)-4));
        return 0;
    }
    
    
    max@studio:~> gcc a.c 
    max@studio:~> ./a.out 
    s=Hello World <<----------- giusto!
    max@studio:~> gcc a.c -m32  <<-------- ora compilo a 32 bit
    max@studio:~> ./a.out 
    s=?        <<---- sbagliato
       l??l?P
    max@studio:~>
    
  • Re: DISEGNARE RECORD DI ATTIVAZIONE SULLO STACK

    Non capisco proprio quello che devo fare..
Devi accedere o registrarti per scrivere nel forum
2 risposte