/ / Stockage temporaire de données de chaîne longue - c, linux, pipe, std

Stockage temporaire de données de longues chaînes - c, linux, pipe, std

Je cherche le moyen approprié pour stocker unchaîne potentiellement très importante temporairement avec un programme C utilisant des bibliothèques standard sur un système posix. La chaîne est l'aboutissement d'une sortie ligne à droite d'une fonction C. Après le dernier appel de cette fonction, je souhaite traiter davantage les données. Existe-t-il un compromis simple entre l'allocation de grandes quantités de mémoire et la création d'un fichier temporaire? Par exemple, je pourrais imaginer écrire dans un tuyau et relire ce tuyau une fois que les données sont nécessaires. Mais je ne suis pas sûr de savoir comment les données seraient traitées en interne dans ce cas et si elles seraient préférables à un fichier temporaire.

Réponses:

1 pour la réponse № 1

Cela dépend surtout de ce que vous devez faire avec leLes données. Si vous devez y accéder de manière aléatoire (par exemple, si vous devez le trier), vous constaterez peut-être que cela est beaucoup plus facile si le fichier est entièrement en mémoire, malgré le coût lié à l'utilisation potentiellement de grandes quantités de mémoire.

Surtout si vous pouvez accéder aux données de manière séquentielle pour les traiter, je vous recommanderai généralement un fichier temporaire si vous vous attendez à ce que les données soient volumineuses.

Une pipe ne vous aidera pas si vous ne créez pasun autre thread pour lire les données hors du tuyau pendant que votre thread principal les écrit. Sinon, vous devrez simplement remplir rapidement les tampons et les blocs du tuyau (blocage, en fait).


0 pour la réponse № 2

Vous pouvez décider (en fonction de votre commentaire, vousdevrait décider au cas par cas) de le conserver en mémoire ou d'écrire sur le disque. Si vous remarquez que les données dépassent un certain seuil, vous écrivez sur le disque et basculez la méthode pour les données restantes à mettre.

Un tuyau n’est pas une bonne idée, car c’est une méthode de communication inter-processus avec une très petite taille de stockage (environ 64koB depuis Linux 2.6, dans la version 2.4, c’était encore moins AFAIR - environ 4 kiB).