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 |