2017-09-25 46 views
0

我的應用程序運行read(sockfd, buffer, BUFFSIZE, 0)。我知道內核需要在現場做一些複製工作。 buffer在堆棧上分配時會發生多少內存複製,如果在堆上分配buffer,會發生多少內存複製?當我從TCP套接字讀取時發生多少內存複製

謝謝。

+1

這真的取決於。我們在談論哪個內核?它是哪個版本? –

+0

'read(sockfd,buffer,BUFFSIZE,0)'??? **四**參數? ['read()'需要三個](http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html):'ssize_t read(int,void *,size_t);'。 –

+0

@Someprogrammerdude我不認爲堆或堆棧的內存在拷貝數上是有區別的。但我確實相信版本之間存在差異(我不明白它是他想要的問題)。 :) – tilz0R

回答

0

無論緩衝區是否在堆棧上,內存副本數始終相同。區別僅在於內存位於複製數據的位置。

在堆棧的情況下,您可以進入堆棧溢出,並且您的程序會有未定義的行爲,而如果您在堆上執行該操作,則可能會進入內存泄漏,如果在不需要時釋放內存它了。