taille maximum d'un fichier

taille maximum d'un fichier - Divers - Programmation

Marsh Posté le 31-08-2009 à 14:26:31    

Bonjour,
 
Je souhaite créer des buffer circulaire de taille importante (~1Go )en C enmanipulant des fichiers et je me demandais s'il y avais une taille limite au fichiers, selon l'OS?
 
 
 
 :??:  
 
environnement: windows XP ou Ubuntu 9.04


---------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
Reply

Marsh Posté le 31-08-2009 à 14:26:31   

Reply

Marsh Posté le 01-09-2009 à 11:00:22    

salut,  
 
celé dépend plutôt du format du système de fichier.  
 
En FAT32 tu seras limité en principe à 4Go, alors qu'en NTFS il n'y a en pratique pas de limite (2^64). Pour Ubuntu cela depend aussi du FS, en ext3 c'est variable selon le formatage.


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 01-09-2009 à 11:46:56    

À mon avis tu seras plus vite limité par la taille de ta RAM que par les limites du FS (à moins que comme l'a dit jagstang, tu utilises FAT ou un autre FS obsolète/exotique)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 01-09-2009 à 13:03:39    

il fait un buffer circulaire à l'aide du FS, c'est justement pour aller au délà des limites de la RAM


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 01-09-2009 à 13:06:49    

Ok mais je suppose que plus gros est le buffer, meilleures sont les performances non?


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 01-09-2009 à 13:49:33    

esox_ch a écrit :

Ok mais je suppose que plus gros est le buffer, meilleures sont les performances non?


Jusqu'à un certain point. Pour ce genre de situation, autant mapper le fichier.

Reply

Marsh Posté le 01-09-2009 à 14:06:54    

Et tu fais ça comment? J'veux dire, qu'est-ce que ça implique du point de vue le la gestion de RAM & co (je demande pas quelles fonctions C/C++ faut utiliser, juste savoir comment marche le mécanisme)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 01-09-2009 à 14:54:43    

esox_ch a écrit :

Et tu fais ça comment? J'veux dire, qu'est-ce que ça implique du point de vue le la gestion de RAM & co (je demande pas quelles fonctions C/C++ faut utiliser, juste savoir comment marche le mécanisme)


Ben justement, c'est ton noyau qui gère ça au mieux. Toi tu te contentes d'écrire tes données dans ton tableau et le noyau vide ça vers le disque à sa guise.

Reply

Marsh Posté le 01-09-2009 à 15:18:53    

D'accord :o Merci


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 01-09-2009 à 16:01:57    

Si tu ne peux pas mapper l'intégralité du fichier (genre gros fichier en 32bits), ça reste quand même intéressant de mapper des segments, genre une fenêtre glissante.

Reply

Marsh Posté le 01-09-2009 à 16:01:57   

Reply

Marsh Posté le 01-09-2009 à 16:26:06    

Pourquoi tu peux pas le mapper complètement?  
(Désolé pour les questions connes, j'ai jamais eu à faire à ce genre de soucis)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-09-2009 à 19:36:58    

jagstang a écrit :

il fait un buffer circulaire à l'aide du FS, c'est justement pour aller au délà des limites de la RAM


 
tout à fait,
car il 'y aurais pas un fichier de 1GO mais plusieur, l'dée étant de faire un serveur de TV, il y aurais environ une cinquantaine de fichier du genre, et ça m'embeterais un tout petit peu de mettre 50Go de RAM^^

Reply

Marsh Posté le 06-09-2009 à 20:38:23    

esox_ch a écrit :

Pourquoi tu peux pas le mapper complètement?
(Désolé pour les questions connes, j'ai jamais eu à faire à ce genre de soucis)


mmapper un fichier fait une correspondance entre ce fichier et une partie de la mémoire virtuelle de ton process. Donc la taille de fichier mmappable dépend de la vmem disponible dans la limite de ta plateforme.

 

En 32b, sous Windows tu as 2Go de VMEM max (ou 3Go avec le switch kivabien, mais tu peux pas en être certain) sous la majorité des unices tu as 4Go, donc la taille de fichier mmappable c'est cette limite - la vmem que tu utilises déjà (code, données internes de ton soft, …)

 

Après, si tu as besoin de plus tu peux switcher entre plusieurs fichiers mmappés qui ont la taille qui va bien pour tenir dans ta limite (1Go~1.5Go si tu as besoin de compat windows, 3Go~3.5Go pour les unices)

 

En 64b, l'espace d'addressage théorique est 16EB (note: les OS n'atteignent pas nécessairement cette limite, sous windows ATM c'est 16TB) donc tu peux mmapper des ISO blu-ray si ça t'amuse.


Message édité par masklinn le 06-09-2009 à 20:41:23

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 07-09-2009 à 17:14:03    

En pratique, sous Linux 32 bits, au-dela de 1,4Go en mmap, tu commences à voir des emmerdes avec des allocs qui foirent pour cause de fractionnement, sous Windows 32 bits, c'est pire. Mais si c'est juste pour un buffer circulaire, destiné à enregistrer du texte, on n'a certainement pas besoin de ça, on doit pouvoir s'en sortir honorablement en mmappant quelques dizaines ou centaines de ko de mémoire. Si c'est pour un clone de Photoshop, par contre, c'est un peu différent. D'ailleurs, je ne serais pas surpris qu'il y ait déjà des API C pour gérer des buffers circulaires dans les libs standard du style Glib C.


Message édité par el muchacho le 07-09-2009 à 17:18:29

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 07-09-2009 à 17:18:26    

c'est pour de la video (du MPEG2)

Reply

Marsh Posté le 07-09-2009 à 17:20:49    

OK, donc là, tu vas devoir gérer la mémoire assez finement, je pense, pour éviter ces problèmes. Sauf si la cible est en 64 bits, auquel cas tu n'as pratiquement pas de limite. Tu peux éventuellement aller voir le source de libs comme FFmpeg, pour t'en inspirer, ou intégrer la lib si la licence le permet.


Message édité par el muchacho le 07-09-2009 à 17:23:16

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

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