예외 처리기를 사용하지 않고 시스템 호출을 사용하여 Linux 스택의 주소 경계를 얻는 방법은 무엇입니까? getrlimit를 사용하여 스택 크기를 얻을 수 있지만 스택이 시작되거나 끝나는 위치는 알려주지 않습니다. RSP는 스택 내의 위치를 가리키므로 얼마나 많이 사용되었는지 또는 사용 가능한지 확인할 수 없습니다. msync를 사용하면 커밋된 콘텐츠를 찾을 수 있지만 아직 건드리지 않은 영역은 찾을 수 없습니다. 내 어셈블리 코드에는 한계에 접근할 수 있을 정도로 스택을 너무 많이 밀어넣지 않았는지 확인하는 검사를 포함하고 싶습니다.
답변1
불행히도 Linux 사용자에게는rusage 구조의 ru_isrss 요소유지되지 않습니다. 대략적인 스택 사용량을 얻기 위해 내가 수행한 해결 방법은 다음과 같습니다.
1/가능한 프로그램 시작 부분에 가깝게 지역 변수를 선언하고 해당 주소를 전역적으로 예약합니다.
2/ 스택 사용량을 확인해야 할 때마다 호출할 수 있는 함수가 있는데, 이는 단순히 다른 지역 변수를 선언하고 해당 주소와 1/에 저장된 주소의 차이를 계산하는 것입니다.
그런데 먼저 플랫폼에서 스택이 커지거나 작아지는지 확인하고 싶을 수도 있습니다.