Franchement, je ne suis pas sûr de la réponse que je vais te donner, mais selon moi (et de ce que j'ai pu lire, notamment via la source Microsoft), il y a plusieurs pages accessibles pour tous les programmes, et allouée selon la mémoire qu'ils utilisent. C'est-à-dire que ces mêmes pages seraient "partitionnées" en fonction du mode d'exécution du software (qui une sorte "d'émulation", mais je ne vais pas rentrer dans les détailles).
Ce schéma pourrait peut-être me donner raison :
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
salut j’espère que ça sera pas trop long à lire :)
La mémoire Virtuelle est un fichier sur le disque dur appelé PageFile.sys dans la racine C qui peut d'ailleurs être augmenter
voici un lien qui pourrait servir à ceux qui le désire : https://www.astuces-pratiques.fr/informatique/gerer-la-memoire-virtuelle-pour-optimiser-windows-7
ce fichier est structurer par l'OS de la même manière qu'il la fait pour la RAM c'est à dire même taille des pages même structure , le plus souvent par pagination(la taille d'une page fait le plus souvent 4KO , Virtuelle et physique). l'adresse d'une page dans ce fichier est appelé adresse logique ou adresse virtuelle . un emplacement de RAM est réserver c'est à dire que cet emplacement correspond à une adresse logique qui est placer dans une table des pages créer par l'os associer au programme et une table des pages est propre à son programme , et cette table des pages peut être stocker n'importe ou dans la RAM, l'OS ou un registre (je sais plus) garde l'emplacement des table des pages des différents programmes. l’ors-que que le programme désire d'utiliser des données dans la mémoire virtuelle un mécanisme de traduction est effectuer grâce au MMU qui se sert de la table des pages du programme qui garde la correspondance des adresses logiques vers les adresses physiques réserver. puis l'os déplace les données de(s) l'emplacement(s) virtuelle(s) désirer vers (les) (l')emplacement(s) de la RAM qui a été réserver. ceci s'appel le Swap ou Swapping (je sais plus) Vas et viens ex: DD-->RAM , RAM-->DD . je précise que seul la page d'une mémoire virtuelle est virtuelle car l'offset lui que ce soit dans la mémoire virtuelle ou physique correspond belle est bien à l'offset physique et n'a pas besoin d’être traduit ni d’être placer dans la Table des pages associer au programme
La mémoire virtuelle est utiliser quand la RAM n'a suffisamment plus de place pour y mettre des données
Bref il y encore plein de choses à expliquer ,les erreurs si une adresse virtuelle correspond à un emplacements de la RAM qui est déjà occupé , le registre PTBR, la protection etc etc...
Tout ça pour dire que la mémoire virtuelle de Windows est le fichier PageFile.sys
Pour revenir à Flush() , fflush() celui du C supprime toutes les données mise dans les différents fichier. Ces fichiers sont des fichiers Flux qui font office de Tampon . et dans la bibliothèque standard du langage C trois fichiers flux servant de tampon sont créer par défaut . ces fichiers sont
Sdtin ,Stdout et Stderr . le premier pour l'entrée standard qui est le clavier , le second pour la sortie standard l'écran et le dernier pour les erreurs . ces fichiers sont munis de descripteur de fichier par défaut qui sont 0 pour Stdin , 1 pour Stdout et 2 pour Stderr . ces fichiers et tous les autres fichiers ouverts (par ex: un fichier .txt) sont stocker dans une table de descripteurs de fichier c'est une structure contenant tout les details des fichiers ouvert par un programme . la source des données des Buffers Stdin ou de Stdout peut être modifié par exemple les données peuvent venir d'un fichier texte pour Stdin et pour Stdout les données peuvent etre envoyé vers un fichier dans le DD. Mais il y a encore un autre Buffer... celui de L'os qui lui fait une taille par defaut de 512KO qui est normalement gérées par le système d’exploitation, qui détermine le délai optimal pour écrire les données automatiquement sur le disque : lorsque une mémoire tampon est saturée, lorsqu’un flux est fermé ou lorsqu’un programme se termine normalement sans avoir à fermer le flux de données. Et il peut aussi etre augmenter . l'ors-que l'on desire écrire sur le DD par exemle et que la source des données viennent de Stdout par ex ou d'ailleurs ces données sont placer dans ce Buffers du systeme d'exploitation avant d'étre ecrits sur le disque . flush() et _flushall() ne permet pas de vider ce Buffer sauf si on l'asscocie avec COMMODE.OBJ. qui en realité ne le vide pas mais permet de passer outre ce Buffer et d'écricre directement les données sur le DD .
Voila voila je pense que j'ai du oublier d'expliquer quelques trucs mais en gros voila et j'espere que j'ai pas dis des conneries parce que je l'ai redigé en vitesse si c'est le cas n'hésite pas à me corriger
J'aurais quelques questions à te poser sous windows il utilise le terme FileHandle, ça signifie la meme chose ou c'est encore differents ?
et es-ce que dans un langage de haut niveau comme le Vb.net il existe aussi des fichiers Flux ou c'est un systeme differents ?
Très bon résumé Il est tard, donc je n'ai pas tout vérifié, mais ça me semble correct dans l’absolu.
FileHandle, je n'ai jamais entendu parler. Mais d'après mes sources, ce un simple fichier de gestion temporaire. Pas vraiment un buffer, mais un peu quand même.
Sous VB, c'est encore différent. Parce que ce langage et son .NET sont très... assistés. De telle sorte à nous faire croire que l'on parle anglais à l'ordinateur. Donc, oui, c'est certainement possible (maintenant, je ne sais pas comment le faire, et si le framework le permet (parce que tout ça, c'est majoritairement du C), ça ne servirait à rien).
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Très bon résumé Il est tard, donc je n'ai pas tout vérifié, mais ça me semble correct dans l’absolu.
FileHandle, je n'ai jamais entendu parler. Mais d'après mes sources, ce un simple fichier de gestion temporaire. Pas vraiment un buffer, mais un peu quand même.
Sous VB, c'est encore différent. Parce que ce langage et son .NET sont très... assistés. De telle sorte à nous faire croire que l'on parle anglais à l'ordinateur. Donc, oui, c'est certainement possible (maintenant, je ne sais pas comment le faire, et si le framework le permet (parce que tout ça, c'est majoritairement du C), ça ne servirait à rien).
merci
Quand t'on regarde un peu la définition de FileHandle ça serai aussi un Index un peu comme le descripteur de fichier mais je comprend pas trop leur explications, elle sont assez vague...
"Lit un bloc d'octets dans le flux et écrit les données dans une mémoire tampon donnée."
"Le offset paramètre indique l’offset d’octet dans array (l’index de la mémoire tampon) à partir duquel commencer la lecture et le count paramètre indique le nombre maximal d’octets à lire dans ce flux."
donc ça laisserait supposer que le tableau est le Tampon ?
Non, array c'est juste un paramètre de la fonction
Et comme je l'ai déjà dit, plus anciennement, un tableau c'est, juste une variable à type structuré. Donc rien à voir avec un buffer. Du moins, je ne pense pas
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Non, array c'est juste un paramètre de la fonction
Et comme je l'ai déjà dit, plus anciennement, un tableau c'est, juste une variable à type structuré. Donc rien à voir avec un buffer. Du moins, je ne pense pas
Salut, après plusieurs recherches et bien... si, Pour faire court le tableau est utilisé comme Tampon du moins qu'avec la classeFileStream en VB.net , FileStreamcommence son nom l'indique (Stream) il crée un flux en lisant dans un fichier par ex. Et les données du fichier et est placer dans un tableau faisant office de Buffer en attente d’être écrites, copiée ou autres suivant le code . Avec Filestream il crée un flux pour limiter les appel système qui sont plus long . Pas comme File qui lui fait appel au système pour manipuler les fichiers c'est peut être un peu plus court et simple à écrire son code mais il est plus long ...
un Buffer est simplement un Index qui correspond à des caractères(données) à la manière d'un tableau. Et en regardant bien les Buffers du langage C Stdin Stdout Stderr sont simplement des fichiers qui sont structuré à la manière d'un Tableau, ils ont un Index correspondant à une ou plusieurs donnée(s).
Si on le prend dans ce sens-là, alors oui, le tableau (et tout autre container) peut être utilisé tel qu'un buffer.
Mais pour te faire une petite idée de ce qu'est un tableau dans la mémoire :
En fait, le mot "buffer" est trop largement utilisé... Mais retiens ce que tu viens de dire, c'est correct. Bien que le .NET "contourne" un peu les règles.
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Ça, je n'en sais rien. Si tu l'as lu dans le doc de Microsoft, c'est probablement vrai
Dans la description il est dit
Array : Mémoire tampon qui contient les données à écrire dans le flux
Mais ce tableau doit servir de tampon intermédiaire parce-que l’ors-que je fais MonFichier.fluch() il ne se passe rien le tableau ne se vide pas , donc Flush() doit servir que pour le Tampon de L'OS, pour le langage Vb.net biensur
Et c'est où que tu as vu ça ? Parce que je ne trouve pas dans la documentation.
Concernant l'architecture .NET, je te renvoie ici. Ça t'expliquera en gros comment les programmes .NET sont compilés.
Sinon, rappel toi ce qu'est une mémoire-tampon pour l'OS : une zone dans le RAM qui charge des données de manière temporaire afin qu'elles puissent être récupérées dans un certain temps d'activité.
Flush, d'après ton explication, semble "juste" vidé cette mémoire-tampon, elle la libère, la nettoie. Donc, son contenu n'est plus accessible, puisqu'il n'existe plus. Il y a sûrement des utilisations utiles de cette fonction pour le .NET, mais en utilisation lambda, elle ne nous concerne pas.
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Et c'est où que tu as vu ça ? Parce que je ne trouve pas dans la documentation.
Concernant l'architecture .NET, je te renvoie ici. Ça t'expliquera en gros comment les programmes .NET sont compilés.
Sinon, rappel toi ce qu'est une mémoire-tampon pour l'OS : une zone dans le RAM qui charge des données de manière temporaire afin qu'elles puissent être récupérées dans un certain temps d'activité.
Flush, d'après ton explication, semble "juste" vidé cette mémoire-tampon, elle la libère, la nettoie. Donc, son contenu n'est plus accessible, puisqu'il n'existe plus. Il y a sûrement des utilisations utiles de cette fonction pour le .NET, mais en utilisation lambda, elle ne nous concerne pas.
"Et c'est où que tu as vu ça ? Parce que je ne trouve pas dans la documentation."
MonFichier.read(Tampon , 0 , TailleMax)
MonFichier.write(Tampon , 0 , TailleMax)
l'ors-que tu vas sur Tampon il y à une petite description
"Donc, son contenu n'est plus accessible, puisqu'il n'existe plus"
oui mais il est censé écrire les données de la mémoire tampon dans le fichier , hors le tableau qui sert de tampon contient des données prête à être écrites pourtant ce n'est pas le cas donc j'en déduis que ça ne vide pas ce Buffer mais celui de l'OS quand il écrit ou lit les données sur le disque
[Chargement des données dans le tampon] → [Écriture des données dans le fichier] (→ [Suppression des données de la mémoire-tampon]).
Gusus a écrit:
j'en déduis que ça ne vide pas ce Buffer mais celui de l'OS quand il écrit ou lit les données sur le disque
C'est possible. Mais, puisque ça passe par le .NET, je ne serais pas te dire exactement comment il effectue son opération. En effet, si tu te rappelles, l'architecture .NET est une sorte de mini-système intermédiaire. Il se peut que ce soit un buffer .NET et/ou le buffer physique correspondant.
Mais quoi qu'il en soit, ça passe par la mémoire, mais de façon soit virtuel, soit réel.
- Edité par vanaur 24 mars 2018 à 18:52:36
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Oui, mais là tu vides le buffer avant qu'il y ait des informations dedans.
Enfin, je t'avouerais ne pas trop connaitre la réponse. Tu peux aller voir ici pour plus d'informations.
- Edité par vanaur il y a 36 minutes
c'est juste que j'ai pas mis la partie qui rempli le tableau
mais sinon le voila
If Mon_Fichier.CanWrite Then
Dim Tampon2(1024) As Byte
Dim Compteur As Integer = 0
For Each Lettres2 As Char In Me.EcrireText.Text.ToCharArray
Tampon2(Compteur) = Asc(Lettres2)
Compteur = Compteur + 1
Next
Mon_Fichier.flush()
Mon_Fichier.Write(Tampon2, 0, Compteur)
end if
If Mon_Fichier.CanWrite Then
Dim Tampon2(1024) As Byte
Dim Compteur As Integer = 0
For Each Lettres2 As Char In Me.EcrireText.Text.ToCharArray
Tampon2(Compteur) = Asc(Lettres2)
Compteur = Compteur + 1
Next
Mon_Fichier.Write(Tampon2, 0, Compteur)
Mon_Fichier.flush()
end if
que le Flush() soit avant , apres ou pas du tout, ya rien qui change :)
donc j'en deduis qu'il vide le Buffer de l'OS et non le Tableau qui fait office de Buffer
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...
Le meilleur moyen de prédire l'avenir, c'est de l'inventer | N'oubliez pas [résolu] et +1 | Excusez mon ôrtograffe, j'essaie de l'améliorer...