2011-01-14 2 views
0

나는 버퍼를 데이터로 할당하는 다중 스레드 응용 프로그램을 가지고 있는데, 소켓을 통해 전송되기 위해 대기열에서 대기한다. 전체 프로그램 (1024, 2048, 2080 및 5248 바이트)에서 고정 크기의 버퍼 만 사용하기 때문에 모든 버퍼가 재현 가능합니다. 내 프로그램에서 보통 각 길이의 버퍼를 최대 10 개까지 동시에 사용할 수 있습니다.리눅스에서 메모리 할당

지금까지 필자는 항상 수동으로 새 버퍼를 할당 한 다음 더 이상 필요하지 않은 곳에 malloc() 및 free()를 사용하여 자유롭게 할당합니다. 나는 리눅스가 나를 위해이 메모리를 캐쉬하기에 충분한 지 궁금해하기 시작했다. 그래서 다음 번에 새로운 버퍼 시스템을 할당 할 때 나는 이전에 이미 사용했던 버퍼를 단지 빨리 받고 새로운 메모리 블록을 할당하는 무거운 연산을 수행하지 않는다.

답변

2

예, malloc()은 요청을 충족시키는 빈 항목이없는 경우에만 sbrk()/brk()를 호출합니다. 이것은 malloc()/free()를 같은 크기의 메모리로 원하는만큼 많이 호출 할 수 있다는 것을 의미합니다.

정말 좋은 솔루션인지 여부는 다른 질문이지만 문제가되지 않을 정도로 빠를 수도 있습니다.

+0

malloc은 익명 메모리의 mmap과 같이 sbrk 이외의 다른 방법을 사용하여 메모리를 할당 할 수 있습니다. – user562374