Après avoir fourni le même programme qui lit un fichier d'entrée généré de manière aléatoire et fait écho à la même chaîne qu'il a lue sur une sortie. La seule différence est que, d'un côté, je fournis les méthodes de lecture et d'écriture à partir de syscalls linux, et de l'autre côté j'utilise fread/fwrite. En programmant mon application avec une taille de 10Mb et en la renvoyant à/dev/null, et en m'assurant que le fichier n'est pas mis en cache, j'ai trouvé que le fwrite de libc est plus rapide avec une grande échelle en utilisant de très petits tampons (1 octet dans le cas).Pourquoi la fonction fwrite libc est plus rapide que la fonction d'écriture syscall?
Voici ma sortie de temps, en utilisant fwrite:
real 0m0.948s
user 0m0.780s
sys 0m0.012s
Et en utilisant le syscall écrire:
real 0m8.607s
user 0m0.972s
sys 0m7.624s
La seule possibilité que je peux penser est que l'intérieur libc est déjà mise en mémoire tampon mon entrée ... Malheureusement, je ne pouvais pas trouver autant d'informations sur le web, alors peut-être que les gourous ici pourraient m'aider.
"interne libc est déjà en train de mettre en mémoire tampon mon entrée". C'est exactement ce qu'il fait. Vous pouvez probablement même lire le code source de libc si vous le souhaitez, et voir exactement comment cela se passe. – kquinn