pointeurs

pointeurs - Delphi/Pascal - Programmation

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
Reply

Marsh Posté le 15-08-2008 à 17:41:39   

Reply

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 :D)


Message édité par antp le 17-08-2008 à 19:12:15

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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.

 


Message édité par rengzehn le 19-08-2008 à 11:14:15
Reply

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;

Reply

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.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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:
test2[0]^ := 1;


 
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.
 
 
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed