2017-09-25 13 views
0

내 응용 프로그램이 read(sockfd, buffer, BUFFSIZE, 0)으로 실행됩니다. 커널이 장면 뒤에서 복사 작업을해야한다는 것을 알고 있습니다. buffer이 스택에 할당 될 때 얼마나 많은 메모리 복사본이 발생하며 buffer이 힙에 할당되면 변경됩니까?TCP 소켓에서 읽을 때 메모리 사본이 몇 개인가

감사합니다. 메모리 복사의

+1

정말 달라집니다. 어떤 커널에 대해 이야기하고 있습니까? 어떤 버전입니까? –

+0

'read (sockfd, buffer, BUFFSIZE, 0)'??? ** 4 개의 매개 변수? ['read()'는 세 가지가 있습니다. (http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html) :'ssize_t read (int, void *, size_t);'. –

+0

@Someprogrammerdude 힙이나 스택 메모리의 복사본 수가 다르다고 나는 믿지 않는다. 하지만 버전 간에는 차이점이 있다고 생각합니다 (나는 그가 원하는 질문으로 이해하지 못함). :) – tilz0R

답변

0

수에 상관없이 버퍼가 또는 스택에있는 경우 항상 동일합니다. 차이점은 데이터를 복사하는 위치에있는 메모리의 위치 만입니다.

스택의 경우 스택 오버플로를 입력 할 수 있으며 프로그램이 정의되지 않은 동작을하는 반면 힙을 수행하면 필요없는 메모리를 확보하지 않으면 메모리 누수가 발생할 수 있습니다 더 이상.