모듈을 호출했지만 kmalloc
모듈을 호출하기 전에 메모리를 해제하지 않았다고 가정하면 메모리는 어떻게 되나요? rmmod
메모리가 누출되어 재부팅할 때까지 완전히 사용할 수 없습니까? 아니면 커널이 해당 메모리를 자동으로 해제합니까?
감사해요
답변1
명시적으로 완료될 때까지 릴리스되지 않습니다. 할당된 메모리를 kmalloc()
해제해야 합니다 kfree()
. 이 메모리는 시스템이 시작될 때까지 유지됩니다.
rmmod
[...] 모듈을 호출하기 전에는 메모리가 해제되지 않습니다. [...]
rmmod
이렇게 하면 module_exit()
모듈이 언로드될 때 메모리를 해제해야 하는 경우를 대비해 메모리를 해제할 수 있는 위치에서 실행됩니다. 예를 들어.
x() {
z = kmalloc(...)
}
y() {
kfree(z)
}
module_init(x)
module_exit(y)