0
C++을 사용하여 AIX 5.3에 어플리케이션을 작성합니다. 프로세스 가상 메모리의 현재 크기를 얻고 싶습니다. 나는 getprocs64
함수를 사용하지만이 데이터를 가지고 나는 svmon
이 보여주는 결과를 얻을 수 없다. 도와주세요.프로그램의 AIX에서 프로세스의 가상 메모리 크기를 얻습니다.
감사합니다.
C++을 사용하여 AIX 5.3에 어플리케이션을 작성합니다. 프로세스 가상 메모리의 현재 크기를 얻고 싶습니다. 나는 getprocs64
함수를 사용하지만이 데이터를 가지고 나는 svmon
이 보여주는 결과를 얻을 수 없다. 도와주세요.프로그램의 AIX에서 프로세스의 가상 메모리 크기를 얻습니다.
감사합니다.
나는 나를 위해 부분적으로 해결책을 찾았습니다.
나는 작은 테스트 응용 프로그램을 실행하고 우리가 (예 :char arr[1024];
) 스택에 메모리를 할당하는 경우
pi_dvm
이
procentry64
구조의 회원이 증가 할 것으로보고 할당 된 객체와 약간의 오버 헤드의 크기. 우리는 사용 된 힙 크기를 계산하려고합니다.
mallinfo
구조체를 반환하는
malloc.h
의
mallinfo()
함수를 사용해야합니다. 우리는
mallinfo
구조의 두 필드에 관심이 있습니다 :
usmblks
및
uordblks
(이 필드에 대해서는
here을 읽을 수 있습니다). 몇 가지 예제 코드 :
pid_t pid = getpid();
struct procentry64 p_info;
if (getprocs64(&p_info, sizeof(p_info), NULL, 0, &pid, 1) < 0) {
printf("Error!");
}
proc_size = p_info.pi_dvm*getpagesize() + p_info.pi_tsize;
struct mallinfo m = mallinfo();
proc_size += m.usmblks + m.uordblks;
return proc_size; // proc_size in bytes
P.S. 모르겠다 왜 우리는 pi_tsize
을 합친 것일까? (아무도 모른다면 알려주십시오.) pg_top 소스에서이 아이디어를 얻었지만 버그가있는 경우 pi_tsize
이 바이트이기 때문에 pi_tsize
에 4를 곱합니다.하지만 올바르지 않습니다. 이 솔루션이 도움이 되길 바랍니다.