2016-10-19 2 views
1

리눅스에서 프로세스 당 힙과 스택의 크기를 알고 싶었다. 그것을 찾을 수있는 방법이 있습니까?리눅스에서 프로세스 당 힙과 스택의 크기를 알아 낸다.

나는 sbrk (0)이 나에게 힙의 끝을 줄 것이라고 알았다. 하지만 힙 크기를 얻기 위해 힙 시작을 어떻게 찾을 수 있습니까?

스택 크기에는 라이브러리 호출이나 시스템 호출을 통해 프로세스마다 스택 시작 및 현재 스택 포인터 주소를 찾는 방법이 있습니까?

답변

0

Linux의 경우 /proc/[PID]/maps을 읽고 [heap][stack] 항목을 찾을 수 있습니다. this quesiton를 참조 -

그러나 일반적으로 리눅스에서 사용되는 GLIBC 힙 구현

는 "힙" [heap] mmap()를 통해 얻은 메모리로 /proc/[PID]/maps 파일에 표시 sbrk()를 통해 얻은 두 메모리로 구성되어 있습니다. 그래서 힙의 "크기"는 확실하게 결정하기가 매우 어려울 것입니다.

maps 파일의 [stack]으로 표시된 영역은 주 스레드의 스택입니다. 다중 스레드 프로세스에는 각 스레드마다 하나씩 여러 개의 스택이 있습니다. 그리고 그들은 maps 파일에 아마 익명의 메모리로 나타날 것입니다 - 어쩌면. 응용 프로그램은 pthread_attr_setstack()을 사용하여 스레드의 스택에 사용되는 메모리를 제어하고 응용 프로그램에서 사용할 수있는 메모리 인 으로 설정할 수 있습니다.

+0

스택 및 힙 크기를 찾는 시스템 호출이 없습니까? –

0

아래 파일을 얻을 수 있습니다. root 사용자 여야합니다.

 /proc/<pid>/maps