리눅스에서 프로세스 당 힙과 스택의 크기를 알고 싶었다. 그것을 찾을 수있는 방법이 있습니까?리눅스에서 프로세스 당 힙과 스택의 크기를 알아 낸다.
나는 sbrk (0)이 나에게 힙의 끝을 줄 것이라고 알았다. 하지만 힙 크기를 얻기 위해 힙 시작을 어떻게 찾을 수 있습니까?
스택 크기에는 라이브러리 호출이나 시스템 호출을 통해 프로세스마다 스택 시작 및 현재 스택 포인터 주소를 찾는 방법이 있습니까?
리눅스에서 프로세스 당 힙과 스택의 크기를 알고 싶었다. 그것을 찾을 수있는 방법이 있습니까?리눅스에서 프로세스 당 힙과 스택의 크기를 알아 낸다.
나는 sbrk (0)이 나에게 힙의 끝을 줄 것이라고 알았다. 하지만 힙 크기를 얻기 위해 힙 시작을 어떻게 찾을 수 있습니까?
스택 크기에는 라이브러리 호출이나 시스템 호출을 통해 프로세스마다 스택 시작 및 현재 스택 포인터 주소를 찾는 방법이 있습니까?
Linux의 경우 /proc/[PID]/maps
을 읽고 [heap]
및 [stack]
항목을 찾을 수 있습니다. this quesiton를 참조 -
그러나 일반적으로 리눅스에서 사용되는 GLIBC 힙 구현
는 "힙"[heap]
및 mmap()
를 통해 얻은 메모리로
/proc/[PID]/maps
파일에 표시
sbrk()
를 통해 얻은 두 메모리로 구성되어 있습니다. 그래서 힙의 "크기"는 확실하게 결정하기가 매우 어려울 것입니다.
maps
파일의 [stack]
으로 표시된 영역은 주 스레드의 스택입니다. 다중 스레드 프로세스에는 각 스레드마다 하나씩 여러 개의 스택이 있습니다. 그리고 그들은 maps
파일에 아마 익명의 메모리로 나타날 것입니다 - 어쩌면. 응용 프로그램은 pthread_attr_setstack()
을 사용하여 스레드의 스택에 사용되는 메모리를 제어하고 응용 프로그램에서 사용할 수있는 메모리 인 으로 설정할 수 있습니다.
아래 파일을 얻을 수 있습니다. root 사용자 여야합니다.
/proc/<pid>/maps
스택 및 힙 크기를 찾는 시스템 호출이 없습니까? –