2017-10-04 7 views
-2

Je suis nouveau dans la programmation en C donc je suis curieux de connaître la notion d'allocation de mémoire.L'écriture sur la sortie standard alloue-t-elle de la mémoire?

L'écriture sur la sortie standard alloue-t-elle de la mémoire?

Par exemple:

write(fd, 'X', 1); //where fd is a specific file descriptor (not 1, 2 or 0) 

Dans ce cas, ce code ajoute un caractère « X » dans le correspondant du fichier à fd, si la mémoire est allouée dans le fichier spécifique. Mais ici:

write(1, 'X', 1); 

est-mémoire allouée? Si oui où? Si non, pourquoi et comment 'X' est-il affiché dans la sortie standard?

+2

Ceci est complètement défini par l'implémentation. Pourquoi demandes-tu? –

+0

Vous pouvez vérifier sur votre système particulier, et si vous utilisez Linux ou OS X, vous pouvez le faire rapidement et facilement avec valgrind. –

+1

C'est nouveau pour moi, je suis juste curieux de savoir comment ça marche. –

Répondre

2

Est-ce que cela alloue de la mémoire? Cela dépend de l'OS. Le système d'exploitation peut avoir besoin de créer des tampons temporaires internes pour contenir les données, mais là encore, il peut utiliser un espace préalloué pour les données. Il n'y a aucun moyen de savoir sans ouvrir le système d'exploitation et voir comment cela fonctionne, et la réponse peut différer d'un système à l'autre ou même d'une exécution à l'autre.

Alloue-t-il la mémoire que vous devez désallouer? Non! L'OS nettoie ses propres dégâts, et donc de votre point de vue, vous n'avez pas besoin de libérer quoi que ce soit. Généralement, vous n'avez besoin que de libérer de la mémoire que vous attribuez explicitement, et les appels système comme ceux-ci ne vous attribuent pas cette responsabilité.

Cela devrait-il être le cas? Probablement pas. Typiquement, vous ne vous inquiéteriez de cela que si vous transfériez des quantités colossales de mémoire et que vous voyiez un hit de performance associé qui vous a amené à étudier ce qui se passait.

+0

Merci! C'est ce que je voulais. –