2017-11-30 1 views
1

프로그램 메모리 사용량을 줄이려고하고 있는데, 수동으로 찾은 예제는 150 개의 요소를 할당하는 배열 이었지만 처음 세 요소 만 실제로 사용되었습니다.GDB로 사용하지 않는 메모리 영역을 발견 할 수 있습니까?

GDB가 할당 된 메모리 영역을 분석 할 수있는 방법이 있는지 궁금 해서요.하지만 다른 유사한 사례를 찾는데 도움이되도록 프로그램 실행 중에 실제로 읽지 마십시오. 프로그램이 C 언어로되어있어 GCC 플래그도 환영합니다.

답변

0

실제로 사용되지 않는 메모리를 찾으려면 적어도 메모리에 대한 쓰기 액세스를 캡처하는 하드웨어 디버거가 지원해야합니다.

GDB에는 하드웨어 지원 기능이 없으므로 찾을 수 없습니다. 그러나 변경된 메모리를 감지 할 수 있습니다. 이 목적을 위해 (프로그램/함수/스 니펫/무엇을) 실행하기 전에 패턴으로 메모리를 할당하고 데이터 패턴이 수정 된 위치를 확인할 수 있습니다. 예를 들면 다음과 같이 사용할 수 있습니다. 사용 된 최대 스택 크기를 탐지합니다. 프로그램을 테스트 한 후 채워진 메모리 영역을 검사 할 수 있으며 첫 번째 불일치를 볼 때 좋은 추측을 할 수 있습니다.

경고! 이 방법은 모든 메모리 수정을 감지하지 못합니다. 이 프로그램은 "사용하지 않은 메모리"로 표시했던 데이터 패턴을 쓸 수 있습니다. 그래서 좋은 패턴을 선택하는 것이 도움이 될 수 있습니다. 패턴을 "all zero"로 사용하는 것은 프로그램에서 0으로 메모리를 채우는 것이 가능하기 때문에 약합니다. 그러나 0xdeadbeaf 시퀀스가 ​​더 현명 할 수 있습니다.

관련 문제