La mémoire
Cette base de connaissance est relié au question en relation avec le Turbo Pascal et la mémoire
Comment définir la mémoire de tas lors de l'exécution d'un processus enfant ?
La meilleure façon de procéder est probablement de procéder par essais et erreurs. Définissez le maximum de mémoire de tas sur une valeur élevée et exécutez le programme. S'il manque de mémoire, divisez le maximum par 2, et ainsi de suite, jusqu'à ce que les programmes parent et enfant aient suffisamment de mémoire. La même chose peut être faite avec le minimum de mémoire de tas.
Quelles fonctions DOS puis-je utiliser pour récupérer de la mémoire sous DOS ?
Vous devez essentiellement écrire vos propres routines GetMem et FreeMem. GetMem appellerait la fonction $48 du DOS et FreeMem appellerait la fonction $49 du DOS.
Combien de blocs de contrôle de mémoire un programme Turbo Pascal utilise-t-il ?
Un seul.
Est-ce que Turbo Pascal 5.0+ prend en charge EMS ?
Oui. Turbo Pascal 5.0+ utilisera jusqu'à 64 Ko (si sélectionné dans TINST) d'EMS pour entreposer le tampon d'édition. De plus, vous pouvez demander à l'unité Overlay de placer vos unités superposées sur EMS. Enfin, un programme EMS.PAS sur le disque de distribution vous montre comment accéder à la mémoire EMS.
La compilation sur disque avec mon maximum de mémoire de tas défini sur 0 crée toujours de l'espace dans la mémoire de tas lors de l'exécution du fichier .EXE. Pourquoi ?
Cela est lié à la façon dont DOS alloue la mémoire pour les fichiers .EXE en blocs de 512 octets, plutôt qu'en blocs de 16 octets. En raison de l'allocation de DOS, vous obtenez toujours 0 à 496 octets de plus que ce que vous demandez.
Comment déterminer la quantité de pile et de la mémoire de tas dont vous avez besoin pour donner un TSR, cela dépend-il du nombre de variables ou de la longueur de votre code ?
Les trois exigences sont basées sur les éléments suivants :
- Espace de pile : Cela dépend de la profondeur de l'imbrication de vos procédures, si vos procédures sont récursives et à quel point elles le seront, de la taille des paramètres de ces procédures et de la taille des variables locales. Gardez à l'esprit que vous ne devez couvrir que la combinaison la plus grande/la plus profonde de tout pour être sûr, pas le total. Pour être sûr, vous devez laisser un peu plus pour les interruptions et autres choses à utiliser (environ $100). On utilise $2000 pour la plupart des programmes et $400 pour les TSR, n'utilisant presque jamais autant. $400 est le minimum que vous pouvez déclarer. Si vous faites beaucoup de récursivité ou si vous mettez d'énormes choses sur la pile, utilisez-en plus. En fait, utilisez le plus petit nombre que vous pouvez vous permettre sans erreur lorsque la vérification de la pile est activée.
- Mémoire de tas minimum : Il s'agit du moins d'espace de tas que votre programme peut exécuter. Votre programme doit absolument avoir au moins cet espace de mémoire de tas lorsqu'il est exécuté. Vous utilisez l'espace de mémoire de tas lorsque vous déclarez des variables avec New ou GetMem (comme avec Turbo Vision ou d'autres objets). Donc, si vous n'utilisez aucune variable dynamique, vous pouvez définir cette valeur sur 0 en toute sécurité. Sinon, définissez-la sur un nombre raisonnable pour votre application.
- Mémoire de tas maximum : Il s'agit de l'espace de tas maximal que votre programme réservera, même s'il en reste davantage. Il doit être suffisamment grand pour contenir toutes les variables dynamiques que vous prévoyez d'allouer, plus un peu... Le problème avec le fait de tout réserver est que vous ne pouvez plus générer de processus enfants avec EXEC. Il doit donc être suffisamment petit pour permettre aux autres processus que vous prévoyez d'exécuter (interpréteur de commande DOS) de s'exécuter, mais suffisamment grand pour ne pas manquer de mémoire facilement... C'est le paramètre le plus difficile à définir. Dans les programmes n'utilisant pas la mémoire de tas, définissez-le sur 0. Dans les programmes n'appelant jamais un processus enfant avec Exec, définissez-le sur 655360 ($100000, ou toute la mémoire disponible). La valeur recommander est 65536 ($10000).