Cercando di insegnare a uno studente delle scuole superiori Dynamic Memory Allocation - quali sono i modi migliori per farlo?

1

Copiato dallo stack overflow a causa del feedback

Quindi voglio insegnare a qualcuno come eseguire l'allocazione della memoria dinamica usando il modello del pad pad block. Ciò significa che ogni blocco di memoria è prefissato e postfisso con 4 byte che mantengono la lunghezza del blocco in byte insieme a un bit (trattenuto nel bit più a sinistra di quello che non dovrebbe mai essere usato) per indicare se il blocco è libero o assegnato.

Tutto nell'allocazione della memoria dinamica comporta la manipolazione del padding dei blocchi che tendo a considerare come nodi in una lista doppiamente collegata. Tecnicamente non è esattamente la stessa cosa, ma è sufficiente per fare un confronto abbastanza decente nella mentalità e nelle operazioni utilizzate.

Lavorerò a un progetto con un ragazzino delle scuole superiori molto più giovane con conoscenze di programmazione di base in C ++ e Java (basato su ciò che afferma, comunque). Fondamentalmente il suo insegnante conosce il suo insegnante del prossimo anno e gli stanno lasciando fare qualche tipo di programmazione durante l'estate con chiunque lo studente scelga (ho avuto l'onore di essere stato scelto).

Ad ogni modo, la soluzione che ho deciso di realizzare qualcosa in un linguaggio di programmazione piuttosto goffo (Game Maker e perché è qualcosa che possiamo fare con gamedev in) con un'interfaccia oggetto / puntatore rotta è semplicemente implementare le strutture usando un array e un'azione come se fosse lo spazio dell'heap. Quindi, stiamo implementando gli algoritmi DMA per agire sugli indici di array. Questo non è molto difficile per me e probabilmente ho un codice semipiccolo da qualche parte nei miei file che sarebbe adatto ai nostri interessi.

Tuttavia, voglio provare a dare all'altra persona la possibilità di farlo, poiché è uno dei sottosistemi cardine del programma. In modo che porti alla domanda finale:

How does one explain the concept of dynamic memory allocation and how to code the functions to do it without relying upon pointers and linked lists as concepts to make comparisons to?

Stavo pensando di creare qualche problema con le risposte e i passaggi per dimostrare le azioni dell'azionatore su un array, ma penso che potrebbe essere eccessivo considerando che dovremmo lavorare subito e non sprecare troppo tempo. Sono dei buoni modi per descrivere block padding e cose che anche un laico potrebbe capire?

Se aiuta il contesto, sono un terzo anno in informatica. Quindi, non ho alcuna esperienza nell'insegnamento.

    
posta The Great Duck 02.05.2017 - 04:55
fonte

2 risposte

1

Sulla base dei feedback che ho ricevuto e ci penso da un po 'di tempo ho realizzato alcuni punti chiave nella mia domanda che ritengo possano portare a una soluzione a questo problema.

  1. La persona con cui sto lavorando ha pochissima conoscenza del codice di basso livello e, anche se probabilmente è in grado di capire i concetti di allocazione dinamica della memoria, probabilmente avrebbe bisogno di un po 'di tempo per capire come codificarlo da zero.

  2. L'unica ragione per cui abbiamo bisogno che il codice scritto sia perché la lingua che abbiamo selezionato dovrebbe avere quella funzione e non funziona correttamente . In particolare, i puntatori possono finire per indicare cose diverse dopo aver liberato memoria.

  3. Il codice stesso è necessario solo allo scopo di allocare memoria e costruire strutture collegate. Non c'è nulla di speciale che dobbiamo fare con la nostra implementazione.

  4. So già come scrivere questo codice e probabilmente ho una versione di esso che ho già scritto in passato e devo solo pulire un po '.

  5. Lo scopo del progetto è che lo studente utilizzi la fisica e la programmazione per creare un videogioco. Perdere la maggior parte del tempo cercando di creare un modulo di allocazione probabilmente non è saggio a lungo termine.

Quindi, penso che forse nella mia particolare situazione il miglior modo di agire sia per me risolvere il problema da solo e prendermi cura di esso invece di insistere sul fatto che la persona che è essenzialmente il mio compagno di squadra conosca ogni centimetro del programma. Dopo tutto, se la lingua non avesse un bug nel suo design, non sprecheremmo il nostro tempo a farlo. Quindi, perché sprecare ancora più tempo cercando di insegnare a qualcuno a codificarlo da solo e poi aspettarsi che facciano una versione funzionante da soli.

Supponendo che stavo per insegnarglielo però , penso che il miglior modo di agire (dato che comunichiamo solo in digitale) sarebbe creare problemi di esempio di qualche forma che mostra la memoria grezza e come cambia quando vengono utilizzate diverse funzioni e input.

    
risposta data 04.05.2017 - 22:50
fonte
0

Per spiegare questo argomento, devi trovare una cosa della vita reale che sia simile e che sia compresa dallo studente.

Ad esempio, potresti usare il concetto di libreria e libri. È possibile posizionare i libri in uno scaffale uno per uno e riempirlo, ma man mano che si estrae i libri, lascia dei buchi che possono essere riempiti con altri libri. A volte hai libri più grandi di altri e non si adattano a quei buchi. Quindi devi mettere il libro alla fine (o prendere un altro scaffale) piuttosto che usare il buco che esiste già. Potresti anche "compattare" i libri, ma ciò invaliderebbe qualsiasi riferimento diretto a quei libri (ad esempio, il 15 ° libro da sinistra sul 3 ° scaffale). (Sì, so che le lingue gestite affrontano questo problema, ma cercando di non diventare troppo tecnico)

Il bit sulla dimensione dell'allocazione è in realtà solo un segnaposto per guardare le dimensioni del libro.

    
risposta data 02.05.2017 - 06:09
fonte

Leggi altre domande sui tag