exec()가 프로그램 이미지를 변경한 후 mallocated 메모리는 어떻게 됩니까?
내가 그들 중 한 명에게 전화를 걸면 그것을 압니다.exec()
시스템은 Linux에서 현재 실행 중인 프로세스를 새로운 이미지로 대체할 것이라고 요구합니다.그래서 새로운 프로세스를 실행할 때exec()
하위 프로세스가 새 프로세스로 대체됩니다.
힙에서 할당한 메모리는 어떻게 됩니까?임의 개수의 명령을 구문 분석하여 에 보내고 싶다고 말합니다.exec()
이 임의의 숫자를 보유하려면 정적 크기의 어레이에서 올바르게 수행할 수 없기 때문에 어느 시점에서 메모리를 할당해야 할 것 같습니다. 따라서 사용할 것입니다.malloc()
또는 그에 상응하는 것.
이 메모리는 전화를 할 때까지 할당된 상태로 유지해야 합니다.exec()
,그렇지만exec()
영영 돌아오지 않는
운영 체제에서 메모리를 회수합니까?
전화할 때fork()
호출 프로세스의 복사본이 생성됩니다.이 자식 프로세스는 (거의) 부모 프로세스와 정확히 동일합니다. 즉, 다음에 의해 할당됩니다.malloc()
보존되며 자유롭게 읽거나 수정할 수 있습니다.그러나 상위 프로세스와 하위 프로세스는 완전히 별개이기 때문에 상위 프로세스에는 수정 사항이 표시되지 않습니다.
전화할 때exec()
하위 프로세스는 새 프로세스로 대체됩니다.임원(2)으로부터:
execve() does not return on success, and the text, data, bss, and stack
of the calling process are overwritten by that of the program loaded.
를 덮어씀으로써data
세그먼트,exec()
call은 이전에 할당된 메모리를 효과적으로 회수합니다.malloc()
.
상위 프로세스는 이 모든 것에 영향을 받지 않습니다.호출하기 전에 상위 프로세스에서 메모리를 할당했다고 가정합니다.fork()
메모리는 부모 프로세스에서 여전히 사용할 수 있습니다.
편집: 최신 구현:malloc()
익명 메모리 매핑 사용(mmap(2) 참조).exece(2)에 따르면 메모리 매핑은 다음과 같이 유지되지 않습니다.exec()
이 메모리도 회수됩니다.
전체 힙(할당된 메모리 및 이를 관리하기 위한 모든 로직몰로크)은 교체되는 프로세스 이미지의 일부입니다.당신의 과정에 관한 한 그것은 그냥 사라집니다.물론, 시스템은 그것을 복구하고 재활용합니다.
언급URL : https://stackoverflow.com/questions/5429141/what-happens-to-malloced-memory-after-exec-changes-the-program-image
'programing' 카테고리의 다른 글
ifelse()가 Date 개체를 숫자 개체로 변환하지 않도록 방지하는 방법 (0) | 2023.06.19 |
---|---|
하위 클래스의 WordPress ajax 함수 (0) | 2023.06.19 |
전체 폴더를 리포지토리에 재귀적으로 추가 (0) | 2023.06.19 |
Spring @Scheduler 병렬 실행 (0) | 2023.06.19 |
쓰는 법SqlServer 및 Oracle(현재는 시스템) 모두에서 작동하는 Net 애플리케이션입니다.Data.OracleClient는 더 이상 사용되지 않습니다.) (0) | 2023.06.19 |