La façon la plus rapide de créer un grand fichier en c++?
Créer un fichier texte en c++ autour de 50 à 100 MO
avec le contenu 'Ajout de la première ligne doit être insérée dans le fichier de 4 millions de fois
Je suppose que tout dépend exactement ce "texte" vous voulez dans le fichier, et ce que vous entendez par "meilleur". Le plus rapide? Je suppose qu'à plusieurs reprises l'écriture d'un tampon contenant un exemple de texte que vous pourrez rejoindre le plus rapide. La cueillette de la taille de la mémoire tampon pour obtenir la meilleure vitesse prend l'expérimentation.
La "Lakh" est un mot Indien pour 10 000 habitants.
La question d'origine (qui a été radicalement modifié) a demandé un bloc de texte répété dans un fichier, et je voulais savoir comment rapide qui peut être écrite. Le changement de la question, il est demande pour une seule chaîne en haut. Et à en juger par les réponses ci-dessous il peut avoir eu d'autres itérations.
La "Lakh" est un mot Indien pour 10 000 habitants.
La question d'origine (qui a été radicalement modifié) a demandé un bloc de texte répété dans un fichier, et je voulais savoir comment rapide qui peut être écrite. Le changement de la question, il est demande pour une seule chaîne en haut. Et à en juger par les réponses ci-dessous il peut avoir eu d'autres itérations.
OriginalL'auteur yesraaj | 2008-11-05
Vous devez vous connecter pour publier un commentaire.
l'utilisation de l'ancienne e /s de fichier
fopen le fichier pour écrire.
fseek à la taille de fichier souhaitée - 1.
fwrite un seul octet
fclose le fichier
Ce n'40 lakhs le temps?
Lol. Cela répond à la question d'origine. Il a été édité un peu depuis. Il a besoin d'une nouvelle réponse.
Si jamais vous voulez faire cela, "l'homme truncate" (fonctionne sur un chemin d'accès) ou ftruncate (avec open()) qui permettra de prolonger ainsi que de tronquer les fichiers à une longueur donnée.
OriginalL'auteur EvilTeach
Le moyen le plus rapide pour créer un fichier d'une certaine taille est tout simplement de créer un fichier de longueur nulle à l'aide de creat() ou open() et ensuite modifier la taille à l'aide de chsize(). Ce sera tout simplement allouer des blocs sur le disque pour le fichier, le contenu est ce qui est arrivé à être dans les blocs(). Il est très rapide car pas de tampon d'écriture doit avoir lieu.
qui dépend de l'O/S. Sur la plupart des systèmes Unix, si vous cherchez à un offset et puis écrire des données, vous vous retrouverez avec un "fichier fragmenté" où l'intervention des blocs de ne pas prendre de place sur le disque.
Le fait qu'il n'y a pas réellement de blocs alloués et rempli avec des zéros est ni ici ni là. Les fichiers fragmentés (sur Unix au moins) sera lu comme zéro, ce qui est la sécurité que vous recherchez.
OriginalL'auteur Ferruccio
Pas sûr de comprendre la question. Ne vous voulez vous assurer que tous les caractères dans le fichier est une version imprimable des caractères ASCII? Si oui, quoi? Remplit le fichier avec "abcdefghabc...."
OriginalL'auteur Kip
Vous n'avez pas mentionné l'OS, mais je vais assumer créer/ouvrir/fermer/écriture sont disponibles.
Pour véritablement efficace que l'écriture et en supposant que, disons, un 4k page et le disque de la taille du bloc et une répétition de la chaîne:
Cette contourne la mise en mémoire tampon de fopen() et ses amis, ce qui est bon et mauvais: leur mise en mémoire tampon qui signifie qu'ils sont agréable et rapide, mais ils sont encore ne va pas être aussi efficace que ce qui n'a pas de surcharge de travail avec le tampon.
Cela peut facilement être écrit en C++ ou C, mais ne suppose que vous allez utiliser appels POSIX plutôt que iostream ou stdio pour des raisons d'efficacité, il est donc à l'extérieur de la bibliothèque de base de la spécification.
4k pages sont régulièrement espacés de départ à 0, donc un pointeur qui divise exactement en 4k est ce que vous voulez. Donc, quelque chose comme char *a=malloc(8192); char *aligné = (char *)(((size_t)a+4096) & ~(size_t)4095) - Vous pouvez travailler avec 4096-%4096 si vous le souhaitez, aussi. Vous visez pour un nombre entier supérieur à un et inférieur à celui d'un+4096 qui divise exactement en 4096.
OriginalL'auteur ijw
Façon la plus rapide de créer un grand fichier en c++?
Ok. Je suppose que la façon la plus rapide-à-dire celui qui prend le plus petit temps d'exécution.
Créer un fichier texte en c++ autour de 50 à 100 MO avec le contenu 'Ajout de la première ligne doit être insérée dans le fichier de 4 millions de fois.
préallouer le fichier à l'aide de style ancien fichier io
préallouer le fichier à l'aide de style ancien fichier io
C'est ma meilleure supposition.
Je suis sûr qu'il ya beaucoup de façons de le faire.
OriginalL'auteur EvilTeach