2010-05-07 4 views
2

이 질문을하는 데 올바른 포럼인지 모르겠지만 나는 stackoverflow의 팬이며 여기에 게시하기로 결정했습니다.SMAPS 메모리의 이름이 지정되지 않은 세그먼트

/proc // smaps를 출력하면, 관련 이름이없고 여러개의 inode 번호가있는 세그먼트가 있습니다. 리눅스 커널 문서에 따르면, 0은 inode가 연관되어 있지 않음을 나타냅니다 BSS (초기화되지 않은 데이터)의 경우와 같이 메모리 영역.

BSS를 검색했지만 정확히 무엇인지 알 수 없습니다. 내가 얻은 정보는 BSS가 unititalised 전역 변수와 정적 변수를 담당하는 메모리 세그먼트입니다.

제 질문은 inode 번호가 0 인 메모리 영역에 포함 된 다른 사항은 무엇입니까?

는 난 다음 위해 dd 된 C 프로그램 작성 : - 정수에 배열 (Ⅰ)의 malloc 4 메가 ​​ (II) 고양이/PROC // 아이 노드와 (III)으로 발견되는 부가 메모리 세그먼트 현재 smaps 스맥에있는 숫자 "0". (iv)이 배열의 일부분을 5에 초기화했습니다.

STILL은이 메모리 세그먼트가 inode 번호 0에만 첨부되어 있음을 발견했습니다. 또 다른 질문은이 메모리 세그먼트가 언제 힙으로 변환되는지 여부입니다. 기본적으로 mmap()MAP_ANONYMOUS 플래그로 생성 된 것들 - 아이 노드 번호 0

답변

2

매핑은 익명 매핑입니다.

이것은 디스크 파일과 관련이 없다는 것을 의미합니다. inode 번호는 변경되지 않습니다. 그 매핑을 위해 항상 0으로 유지됩니다.

익명 매핑이 힙으로 변환되지 않습니다. 사실 "[heap]"은 exec 시간에 커널에 의해 설정되고 brk() 시스템 호출에 의해 변경된 익명 매핑의 편의 마커 일뿐입니다.

+0

이렇게 익명 매핑이 언제 그리고 정확히 어떻게 힙 메모리 세그먼트로 변경됩니까? – Vaibhav

+0

그렇지 않습니다. 그게 무슨 생각을하게 하죠? – caf

+0

정수 배열에 4MB의 malloc()을 수행했습니다. 나는이 기억이 힙 세그먼트로 들어가야한다고 생각한다. 그러나 스맥스 (smaps)의 산출물로부터 그것은 익명의 기억 지역으로 갔다는 것은 분명했습니다. 나는 내가 실행중인 프로그램이 사용자 모드 프로세스이므로 4Mb의 등가 RAM이 할당되지 않는다는 것을 이해한다. 즉, 4Mb의 가상 주소 공간이 익명 메모리 영역에 매핑된다. 그러나 동적 메모리 할당이 초기화 된이 메모리 영역을 "힙 세그먼트"로 표시해야합니까? 이유가 아니라면 힙 세그먼트에 무엇이 들어 있습니까? – Vaibhav

관련 문제