programing

exec()가 프로그램 이미지를 변경한 후 mallocated 메모리는 어떻게 됩니까?

testmans 2023. 6. 19. 21:18
반응형

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

반응형