보통, malloc() 등으로 memory block을 할당할 경우,
memory block 바로 이전부분에 MBR(memory block record, 뭐... 명칭은 나름 다를수 있겠죠)
를 만들고 여기에 각종 정보, 이를테면, memory block 크기, 다름 block의 address 등...
뭐.. 여타 정보를 넣어놓습니다.
free()할 경우, 이 정보를 참고하여, 크기를 판단하고 해제하고 그렇게 하죠.
platform이나, memory block의 종류, 뭐.. .기타 등등에 따라서 구현방법이 상이합니다.
구현하는 것마다 틀리다는 것은,
new를 오버로딩해서 구현 자체를 바꾼다는 의미이신가요?
힙 메모리를 관리하는 방식은 시스템마다 정해져 있을텐데...
큰 블럭을 할당해 놓고, 그 블럭내에서 다시 chunk단위로 메모리를 주는
메모리 관리 모듈을 만든다면 블럭 정보를 직접 컨트롤 할 수 있을 것 같기도 한데..
하지만 처음 질문 하신분의 의도는 다른 프로세스의 힙메모리 정보까지 보시는 것을 원하는 것 같던데,
그럼 이런 유저 메모리 관리 모듈은 의미가 없을 것 같네요.
힙 메모리는 user process 영역이므로 이를 어떻게 관리하는가는 원칙적으로 "시스템(OS)"의 영역이 아닙니다. 물론 대부분의 프로그램이 표준화된 라이브러리를 이용할 것이므로 (Linux라면 glibc) 동일한 방식으로 돌아갈 확률이 높습니다만 꼭 그래야 되는 건 아닙니다.
알수 있습니다.
질문의 내용과 일치하는지는 모르겠지만...
보통, malloc() 등으로 memory block을 할당할 경우,
memory block 바로 이전부분에 MBR(memory block record, 뭐... 명칭은 나름 다를수 있겠죠)
를 만들고 여기에 각종 정보, 이를테면, memory block 크기, 다름 block의 address 등...
뭐.. 여타 정보를 넣어놓습니다.
free()할 경우, 이 정보를 참고하여, 크기를 판단하고 해제하고 그렇게 하죠.
platform이나, memory block의 종류, 뭐.. .기타 등등에 따라서 구현방법이 상이합니다.
아 그런거군요. 이제
아 그런거군요. 이제 뭘 공부해야 할 지 알겠네요. 감사합니다.
화이팅(fighting) 말고 화이트닝(whitening) 하면 안되나요.
메모리 초기화는...
해제된 메모리에 대한 메모리 초기화는 대부분 하지 않는데...
이미 해제된 메모리에 남아있는 메모리 블럭 정보를
잘못 읽어올 수도 있을 것 같은데요?
_________________________________________________________
nineye's blog
나름 다릅니다.
구현하는 것마다 틀립니다.
MBR에 유효성여부를 넣는 경우도 있고요.
전체 heap내에서의 link에서 빼는 경우도 있고...
블럭 정보는 누가...
구현하는 것마다 틀리다는 것은,
new를 오버로딩해서 구현 자체를 바꾼다는 의미이신가요?
힙 메모리를 관리하는 방식은 시스템마다 정해져 있을텐데...
큰 블럭을 할당해 놓고, 그 블럭내에서 다시 chunk단위로 메모리를 주는
메모리 관리 모듈을 만든다면 블럭 정보를 직접 컨트롤 할 수 있을 것 같기도 한데..
하지만 처음 질문 하신분의 의도는 다른 프로세스의 힙메모리 정보까지 보시는 것을 원하는 것 같던데,
그럼 이런 유저 메모리 관리 모듈은 의미가 없을 것 같네요.
_________________________________________________________
nineye's blog
...
힙 메모리는 user process 영역이므로 이를 어떻게 관리하는가는 원칙적으로 "시스템(OS)"의 영역이 아닙니다. 물론 대부분의 프로그램이 표준화된 라이브러리를 이용할 것이므로 (Linux라면 glibc) 동일한 방식으로 돌아갈 확률이 높습니다만 꼭 그래야 되는 건 아닙니다.
헛 시스템영역의
헛 시스템영역의 문제가 아니라 언어별 메모리관리자 라이브러리의 문제라는 말씀이시군요.
그렇다면 다른 프로세스의 메모리 영역에 대한 분석을 시도할 때, 그 방법의 수가 대단히 많아지는 것 맞죠.
저는 각 OS별 메모리관리 방식에 대한 이해만 있으면 일단 가능할 줄 알았는데 아닌가보네요;
화이팅(fighting) 말고 화이트닝(whitening) 하면 안되나요.
댓글 달기