2017-09-25 5 views
0

Mon application s'exécute read(sockfd, buffer, BUFFSIZE, 0). Je sais que le noyau doit faire un travail de copie derrière la scène. Combien de copies de mémoire se produisent lorsque buffer est alloué sur la pile, et changera-t-il si buffer est alloué sur le tas?Combien de copies de mémoire se produisent lorsque je lis à partir du socket TCP

Merci.

+1

Cela dépend vraiment. De quel noyau parlons-nous? Quelle version de cela? –

+0

'read (sockfd, buffer, BUFFSIZE, 0)' ??? ** QUATRE ** paramètres? ['read()' prend trois] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html): 'ssize_t read (int, void *, size_t);'. –

+0

@Someprogrammerdude Je ne crois pas qu'il y ait de différence entre la mémoire de tas ou de pile dans le nombre de copies. Mais je crois qu'il y a une différence entre les versions (que je ne comprends pas comme la question qu'il veut). :) – tilz0R

Répondre

0

Le nombre de copies de mémoire est toujours le même, peu importe si le tampon est activé tas ou pile. La différence est seulement où est la mémoire située où vous copiez vos données. En cas de pile, vous pouvez entrer en pile de débordement et votre programme aura un comportement indéfini alors que si vous le faites sur tas, vous pouvez entrer dans des fuites de mémoire si vous ne libérez pas votre mémoire après que vous n'avez pas besoin plus maintenant.