pointeurs - Delphi/Pascal - Programmation
Marsh Posté le 17-08-2008 à 19:11:43
Je suppose que ça fait allusion à la pile sur laquelle sont stockées les variables locales d'une fonction.
Parce que si ça fait allusion à local heap / global heap, cette différence date de Windows 3.x et ça ne s'applique pas aux softs Win32.
Réserver 1 Go sur la pile :
function Machin;
var
test1: array[0..1000000000] of Byte;
begin
test1[0] := 1;
end;
ça explose avec un beau "stack overflow"
alors qu'avec un tableau dynamique qui est en fait un pointeur :
function Machin;
var
test2: array of Byte;
begin
SetLength(test2, 1000000000);
test2[0] := 1;
end;
ça passe (bon, il faut assez de RAM évidemment )
Marsh Posté le 19-08-2008 à 11:12:06
Salut,
Perso j'ai utilisé les pointeurs longtemps quand il n'était pas trop possible de créer des objets de taille variable (tableaux par exemple). L'interet des pointeur était alors la gestion dynamique de la mémoire. C'est principalement couplé aux listes chainées.
Exemple : tu as un fichier texte avec une valeur réelle sur chaque ligne et tu veux en faire la moyenne ne connaissant pas le nombre de lignes du fichier. Des langages n'autorisent pas la création de tableau avec une taille dynamique. Avec les pointeurs tu gères ça comme tu veux. Ca permet de stocker n'importe quel type de variable en n'importe quelle quantité (avec les limites physiques tout de même).
De la même manière, tu libères les espaces plus utilisés facilement.
Marsh Posté le 19-08-2008 à 11:45:39
ok donc c'est pour les très gros projets. merci de la réponse. Pour antp un tableau dynamique est un pointeur? Je croyais que pour accéder aux pointeurs il fallait:
test2[0]^ := 1;
Marsh Posté le 19-08-2008 à 12:03:40
Un tableau dynamique est géré en interne comme un pointeur (cf exemple de code), c'est juste plus facile à utiliser.
Marsh Posté le 19-08-2008 à 13:36:19
ouiouioui10 a écrit : ok donc c'est pour les très gros projets. merci de la réponse. Pour antp un tableau dynamique est un pointeur? Je croyais que pour accéder aux pointeurs il fallait: |
Non pas forcement des gros projets, n'importe quel type de programme du moment ou tu as besoin de travailler sur des structures dont tu ne connais pas le nombre d'entités. C'est beaucoup utilisé en Pascal et en C ou tu ne peux pas créer de tableau de taille non fixée comme :
var
test1: array[0..N] of Byte;
ou N est défini par ailleurs dans le programme.
C'est très lié aux listes chaînées et si tu étudies les pointeurs, il faut que tu aies compris ce qu'est une liste chaînée pour comprendre un des principaux intérêts des pointeurs.
Marsh Posté le 15-08-2008 à 17:41:39
Bonjour, j'étudie la programmation et j'en suis aux pointeurs, j'ai beau cherché sur le forum ou google je comprend pas leur utilité
stockés les données dans la mémoire global j'ai lu, mais j'ai pas compris ce que sa signifie.
est-ce que quelqu'un pourrait m'expliquer ou me donner un lien. J'ai à peut près compris comment les utiliser sa il y a plein de tuto mais pas pourquoi.
j'ai trouvé sa:
Leur intérêt réside dans la gestion de la mémoire, sujet dont je vais parler juste un petit peu. La mémoire que vous utilisez dans vos programmes n'est pas illimitée : il faut éviter au maximum d'en utiliser de grosses quantités sans passer par les pointeurs. Cette mémoire se décompose à peu près en deux parties : la mémoire locale, et la mémoire globale. La première est celle que vous utilisez lorsque vous déclarez une variable locale par exemple. Cette mémoire est de taille très limitée. La mémoire globale, en revanche, est virtuellement limitée à 4 gigaoctets et Windows s'occupe d'en fournir lorsque c'est nécessaire. C'est là que les pointeurs interviennent : lorsque vous déclarez par exemple 100 enregistrements de type TPersonne, ces enregistrements sont stockés en mémoire locale, ce qui occupe pas mal de place. En utilisant des pointeurs, seuls ces derniers sont stockés en mémoire locale, et les éléments pointés le sont dans la mémoire globale.
je comprend mais alors quel taille fais la mémoire local, quand doit-ton utiliser des pointeurs?
merci.
Message édité par ouiouioui10 le 15-08-2008 à 17:50:06