htop показывает, что память все еще используется, даже если был вызван метод deallocate - PullRequest
2 голосов
/ 17 июня 2020
mac osx (catalina)
gfortran 9.3.0 from homebrew
htop 2.2.0 from homebrew

У меня есть следующая программа в memtest.f90, которую я компилирую с помощью gfortran memtest.f90 -o test, а затем вызываю с помощью ./test

program main
  implicit none
  integer, parameter :: n=100000000
  real, allocatable :: values(:)
  print *, "no memory used yet, press enter"
  read(*,*)
  allocate(values(n))
  values = 0.0
  print *, "used a lot of memory, press enter"
  read(*,*)
  deallocate(values)
  print *, "why is the memory still there in htop"
  read(*,*)
end program main

Я ожидаю, что память, используемая программой, исчезнет после вызов оператора освобождения, однако, как обозначено htop, он продолжает зависать примерно на 382 МБ (см. изображение ниже)

это утечка памяти, и если да, то как мне правильно освободить память или я просто делаете что-то не так, глядя на память, потребляемую программой?

enter image description here

1 Ответ

4 голосов
/ 17 июня 2020

Программа обычно не возвращает память операционной системе ниже некоторого порога. Также может потребоваться некоторое время для освобождения. Это не проблема Fortran, а проблема системы.

Я не отмечал это как дубликат этой Будет ли реализация mallo c возвращать освобожденную память обратно в систему? потому что это довольно косвенно и заслуживает некоторых комментариев, но проблема есть. Компиляторы Fortran обычно вызывают malloc, предоставляемый операционной системой или сопровождающей C -компилятор C библиотекой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...