get_memory_info Subroutine

public subroutine get_memory_info(mem_free, mem_total)

Arguments

Type IntentOptional Attributes Name
integer(kind=I8P), intent(out) :: mem_free
integer(kind=I8P), intent(out) :: mem_total

Calls

proc~~get_memory_info~5~~CallsGraph proc~get_memory_info~5 get_memory_info interface~cton cton proc~get_memory_info~5->interface~cton proc~ctoi_i1p ctoi_I1P interface~cton->proc~ctoi_i1p proc~ctoi_i2p ctoi_I2P interface~cton->proc~ctoi_i2p proc~ctoi_i4p ctoi_I4P interface~cton->proc~ctoi_i4p proc~ctoi_i8p ctoi_I8P interface~cton->proc~ctoi_i8p proc~ctor_r4p ctor_R4P interface~cton->proc~ctor_r4p proc~ctor_r8p ctor_R8P interface~cton->proc~ctor_r8p

Called by

proc~~get_memory_info~5~~CalledByGraph proc~get_memory_info~5 get_memory_info proc~alloc_var_i1p_1d~5 alloc_var_I1P_1D proc~alloc_var_i1p_1d~5->proc~get_memory_info~5 proc~alloc_var_i1p_2d~5 alloc_var_I1P_2D proc~alloc_var_i1p_2d~5->proc~get_memory_info~5 proc~alloc_var_i1p_3d~5 alloc_var_I1P_3D proc~alloc_var_i1p_3d~5->proc~get_memory_info~5 proc~alloc_var_i1p_4d~5 alloc_var_I1P_4D proc~alloc_var_i1p_4d~5->proc~get_memory_info~5 proc~alloc_var_i1p_5d~5 alloc_var_I1P_5D proc~alloc_var_i1p_5d~5->proc~get_memory_info~5 proc~alloc_var_i1p_6d~5 alloc_var_I1P_6D proc~alloc_var_i1p_6d~5->proc~get_memory_info~5 proc~alloc_var_i1p_7d~5 alloc_var_I1P_7D proc~alloc_var_i1p_7d~5->proc~get_memory_info~5 proc~alloc_var_i2p_1d~5 alloc_var_I2P_1D proc~alloc_var_i2p_1d~5->proc~get_memory_info~5 proc~alloc_var_i2p_2d~5 alloc_var_I2P_2D proc~alloc_var_i2p_2d~5->proc~get_memory_info~5 proc~alloc_var_i2p_3d~5 alloc_var_I2P_3D proc~alloc_var_i2p_3d~5->proc~get_memory_info~5 proc~alloc_var_i2p_4d~5 alloc_var_I2P_4D proc~alloc_var_i2p_4d~5->proc~get_memory_info~5 proc~alloc_var_i2p_5d~5 alloc_var_I2P_5D proc~alloc_var_i2p_5d~5->proc~get_memory_info~5 proc~alloc_var_i2p_6d~5 alloc_var_I2P_6D proc~alloc_var_i2p_6d~5->proc~get_memory_info~5 proc~alloc_var_i2p_7d~5 alloc_var_I2P_7D proc~alloc_var_i2p_7d~5->proc~get_memory_info~5 proc~alloc_var_i4p_1d~5 alloc_var_I4P_1D proc~alloc_var_i4p_1d~5->proc~get_memory_info~5 proc~alloc_var_i4p_2d~5 alloc_var_I4P_2D proc~alloc_var_i4p_2d~5->proc~get_memory_info~5 proc~alloc_var_i4p_3d~5 alloc_var_I4P_3D proc~alloc_var_i4p_3d~5->proc~get_memory_info~5 proc~alloc_var_i4p_4d~5 alloc_var_I4P_4D proc~alloc_var_i4p_4d~5->proc~get_memory_info~5 proc~alloc_var_i4p_5d~5 alloc_var_I4P_5D proc~alloc_var_i4p_5d~5->proc~get_memory_info~5 proc~alloc_var_i4p_6d~5 alloc_var_I4P_6D proc~alloc_var_i4p_6d~5->proc~get_memory_info~5 proc~alloc_var_i4p_7d~5 alloc_var_I4P_7D proc~alloc_var_i4p_7d~5->proc~get_memory_info~5 proc~alloc_var_i8p_1d~5 alloc_var_I8P_1D proc~alloc_var_i8p_1d~5->proc~get_memory_info~5 proc~alloc_var_i8p_2d~5 alloc_var_I8P_2D proc~alloc_var_i8p_2d~5->proc~get_memory_info~5 proc~alloc_var_i8p_3d~5 alloc_var_I8P_3D proc~alloc_var_i8p_3d~5->proc~get_memory_info~5 proc~alloc_var_i8p_4d~5 alloc_var_I8P_4D proc~alloc_var_i8p_4d~5->proc~get_memory_info~5 proc~alloc_var_i8p_5d~5 alloc_var_I8P_5D proc~alloc_var_i8p_5d~5->proc~get_memory_info~5 proc~alloc_var_i8p_6d~5 alloc_var_I8P_6D proc~alloc_var_i8p_6d~5->proc~get_memory_info~5 proc~alloc_var_i8p_7d~5 alloc_var_I8P_7D proc~alloc_var_i8p_7d~5->proc~get_memory_info~5 proc~alloc_var_r16p_1d~5 alloc_var_R16P_1D proc~alloc_var_r16p_1d~5->proc~get_memory_info~5 proc~alloc_var_r16p_2d~5 alloc_var_R16P_2D proc~alloc_var_r16p_2d~5->proc~get_memory_info~5 proc~alloc_var_r16p_3d~5 alloc_var_R16P_3D proc~alloc_var_r16p_3d~5->proc~get_memory_info~5 proc~alloc_var_r16p_4d~5 alloc_var_R16P_4D proc~alloc_var_r16p_4d~5->proc~get_memory_info~5 proc~alloc_var_r16p_5d~5 alloc_var_R16P_5D proc~alloc_var_r16p_5d~5->proc~get_memory_info~5 proc~alloc_var_r16p_6d~5 alloc_var_R16P_6D proc~alloc_var_r16p_6d~5->proc~get_memory_info~5 proc~alloc_var_r16p_7d~5 alloc_var_R16P_7D proc~alloc_var_r16p_7d~5->proc~get_memory_info~5 proc~alloc_var_r4p_1d~5 alloc_var_R4P_1D proc~alloc_var_r4p_1d~5->proc~get_memory_info~5 proc~alloc_var_r4p_2d~5 alloc_var_R4P_2D proc~alloc_var_r4p_2d~5->proc~get_memory_info~5 proc~alloc_var_r4p_3d~5 alloc_var_R4P_3D proc~alloc_var_r4p_3d~5->proc~get_memory_info~5 proc~alloc_var_r4p_4d~5 alloc_var_R4P_4D proc~alloc_var_r4p_4d~5->proc~get_memory_info~5 proc~alloc_var_r4p_5d~5 alloc_var_R4P_5D proc~alloc_var_r4p_5d~5->proc~get_memory_info~5 proc~alloc_var_r4p_6d~5 alloc_var_R4P_6D proc~alloc_var_r4p_6d~5->proc~get_memory_info~5 proc~alloc_var_r4p_7d~5 alloc_var_R4P_7D proc~alloc_var_r4p_7d~5->proc~get_memory_info~5 proc~alloc_var_r8p_1d~5 alloc_var_R8P_1D proc~alloc_var_r8p_1d~5->proc~get_memory_info~5 proc~alloc_var_r8p_2d~5 alloc_var_R8P_2D proc~alloc_var_r8p_2d~5->proc~get_memory_info~5 proc~alloc_var_r8p_3d~5 alloc_var_R8P_3D proc~alloc_var_r8p_3d~5->proc~get_memory_info~5 proc~alloc_var_r8p_4d~5 alloc_var_R8P_4D proc~alloc_var_r8p_4d~5->proc~get_memory_info~5 proc~alloc_var_r8p_5d~5 alloc_var_R8P_5D proc~alloc_var_r8p_5d~5->proc~get_memory_info~5 proc~alloc_var_r8p_6d~5 alloc_var_R8P_6D proc~alloc_var_r8p_6d~5->proc~get_memory_info~5 proc~alloc_var_r8p_7d~5 alloc_var_R8P_7D proc~alloc_var_r8p_7d~5->proc~get_memory_info~5 proc~save_memory_status~5 save_memory_status proc~save_memory_status~5->proc~get_memory_info~5 interface~allocate_variable~5 allocate_variable interface~allocate_variable~5->proc~alloc_var_i1p_1d~5 interface~allocate_variable~5->proc~alloc_var_i1p_2d~5 interface~allocate_variable~5->proc~alloc_var_i1p_3d~5 interface~allocate_variable~5->proc~alloc_var_i1p_4d~5 interface~allocate_variable~5->proc~alloc_var_i1p_5d~5 interface~allocate_variable~5->proc~alloc_var_i1p_6d~5 interface~allocate_variable~5->proc~alloc_var_i1p_7d~5 interface~allocate_variable~5->proc~alloc_var_i2p_1d~5 interface~allocate_variable~5->proc~alloc_var_i2p_2d~5 interface~allocate_variable~5->proc~alloc_var_i2p_3d~5 interface~allocate_variable~5->proc~alloc_var_i2p_4d~5 interface~allocate_variable~5->proc~alloc_var_i2p_5d~5 interface~allocate_variable~5->proc~alloc_var_i2p_6d~5 interface~allocate_variable~5->proc~alloc_var_i2p_7d~5 interface~allocate_variable~5->proc~alloc_var_i4p_1d~5 interface~allocate_variable~5->proc~alloc_var_i4p_2d~5 interface~allocate_variable~5->proc~alloc_var_i4p_3d~5 interface~allocate_variable~5->proc~alloc_var_i4p_4d~5 interface~allocate_variable~5->proc~alloc_var_i4p_5d~5 interface~allocate_variable~5->proc~alloc_var_i4p_6d~5 interface~allocate_variable~5->proc~alloc_var_i4p_7d~5 interface~allocate_variable~5->proc~alloc_var_i8p_1d~5 interface~allocate_variable~5->proc~alloc_var_i8p_2d~5 interface~allocate_variable~5->proc~alloc_var_i8p_3d~5 interface~allocate_variable~5->proc~alloc_var_i8p_4d~5 interface~allocate_variable~5->proc~alloc_var_i8p_5d~5 interface~allocate_variable~5->proc~alloc_var_i8p_6d~5 interface~allocate_variable~5->proc~alloc_var_i8p_7d~5 interface~allocate_variable~5->proc~alloc_var_r4p_1d~5 interface~allocate_variable~5->proc~alloc_var_r4p_2d~5 interface~allocate_variable~5->proc~alloc_var_r4p_3d~5 interface~allocate_variable~5->proc~alloc_var_r4p_4d~5 interface~allocate_variable~5->proc~alloc_var_r4p_5d~5 interface~allocate_variable~5->proc~alloc_var_r4p_6d~5 interface~allocate_variable~5->proc~alloc_var_r4p_7d~5 interface~allocate_variable~5->proc~alloc_var_r8p_1d~5 interface~allocate_variable~5->proc~alloc_var_r8p_2d~5 interface~allocate_variable~5->proc~alloc_var_r8p_3d~5 interface~allocate_variable~5->proc~alloc_var_r8p_4d~5 interface~allocate_variable~5->proc~alloc_var_r8p_5d~5 interface~allocate_variable~5->proc~alloc_var_r8p_6d~5 interface~allocate_variable~5->proc~alloc_var_r8p_7d~5 proc~assign_allocatable_i1p_1d~5 assign_allocatable_I1P_1D proc~assign_allocatable_i1p_1d~5->interface~allocate_variable~5 proc~assign_allocatable_i1p_2d~5 assign_allocatable_I1P_2D proc~assign_allocatable_i1p_2d~5->interface~allocate_variable~5 proc~assign_allocatable_i1p_3d~5 assign_allocatable_I1P_3D proc~assign_allocatable_i1p_3d~5->interface~allocate_variable~5 proc~assign_allocatable_i1p_4d~5 assign_allocatable_I1P_4D proc~assign_allocatable_i1p_4d~5->interface~allocate_variable~5 proc~assign_allocatable_i1p_5d~5 assign_allocatable_I1P_5D proc~assign_allocatable_i1p_5d~5->interface~allocate_variable~5 proc~assign_allocatable_i1p_6d~5 assign_allocatable_I1P_6D proc~assign_allocatable_i1p_6d~5->interface~allocate_variable~5 proc~assign_allocatable_i1p_7d~5 assign_allocatable_I1P_7D proc~assign_allocatable_i1p_7d~5->interface~allocate_variable~5 proc~assign_allocatable_i2p_1d~5 assign_allocatable_I2P_1D proc~assign_allocatable_i2p_1d~5->interface~allocate_variable~5 proc~assign_allocatable_i2p_2d~5 assign_allocatable_I2P_2D proc~assign_allocatable_i2p_2d~5->interface~allocate_variable~5 proc~assign_allocatable_i2p_3d~5 assign_allocatable_I2P_3D proc~assign_allocatable_i2p_3d~5->interface~allocate_variable~5 proc~assign_allocatable_i2p_4d~5 assign_allocatable_I2P_4D proc~assign_allocatable_i2p_4d~5->interface~allocate_variable~5 proc~assign_allocatable_i2p_5d~5 assign_allocatable_I2P_5D proc~assign_allocatable_i2p_5d~5->interface~allocate_variable~5 proc~assign_allocatable_i2p_6d~5 assign_allocatable_I2P_6D proc~assign_allocatable_i2p_6d~5->interface~allocate_variable~5 proc~assign_allocatable_i2p_7d~5 assign_allocatable_I2P_7D proc~assign_allocatable_i2p_7d~5->interface~allocate_variable~5 proc~assign_allocatable_i4p_1d~5 assign_allocatable_I4P_1D proc~assign_allocatable_i4p_1d~5->interface~allocate_variable~5 proc~assign_allocatable_i4p_2d~5 assign_allocatable_I4P_2D proc~assign_allocatable_i4p_2d~5->interface~allocate_variable~5 proc~assign_allocatable_i4p_3d~5 assign_allocatable_I4P_3D proc~assign_allocatable_i4p_3d~5->interface~allocate_variable~5 proc~assign_allocatable_i4p_4d~5 assign_allocatable_I4P_4D proc~assign_allocatable_i4p_4d~5->interface~allocate_variable~5 proc~assign_allocatable_i4p_5d~5 assign_allocatable_I4P_5D proc~assign_allocatable_i4p_5d~5->interface~allocate_variable~5 proc~assign_allocatable_i4p_6d~5 assign_allocatable_I4P_6D proc~assign_allocatable_i4p_6d~5->interface~allocate_variable~5 proc~assign_allocatable_i4p_7d~5 assign_allocatable_I4P_7D proc~assign_allocatable_i4p_7d~5->interface~allocate_variable~5 proc~assign_allocatable_i8p_1d~5 assign_allocatable_I8P_1D proc~assign_allocatable_i8p_1d~5->interface~allocate_variable~5 proc~assign_allocatable_i8p_2d~5 assign_allocatable_I8P_2D proc~assign_allocatable_i8p_2d~5->interface~allocate_variable~5 proc~assign_allocatable_i8p_3d~5 assign_allocatable_I8P_3D proc~assign_allocatable_i8p_3d~5->interface~allocate_variable~5 proc~assign_allocatable_i8p_4d~5 assign_allocatable_I8P_4D proc~assign_allocatable_i8p_4d~5->interface~allocate_variable~5 proc~assign_allocatable_i8p_5d~5 assign_allocatable_I8P_5D proc~assign_allocatable_i8p_5d~5->interface~allocate_variable~5 proc~assign_allocatable_i8p_6d~5 assign_allocatable_I8P_6D proc~assign_allocatable_i8p_6d~5->interface~allocate_variable~5 proc~assign_allocatable_i8p_7d~5 assign_allocatable_I8P_7D proc~assign_allocatable_i8p_7d~5->interface~allocate_variable~5 proc~assign_allocatable_r16p_1d~5 assign_allocatable_R16P_1D proc~assign_allocatable_r16p_1d~5->interface~allocate_variable~5 proc~assign_allocatable_r16p_2d~5 assign_allocatable_R16P_2D proc~assign_allocatable_r16p_2d~5->interface~allocate_variable~5 proc~assign_allocatable_r16p_3d~5 assign_allocatable_R16P_3D proc~assign_allocatable_r16p_3d~5->interface~allocate_variable~5 proc~assign_allocatable_r16p_4d~5 assign_allocatable_R16P_4D proc~assign_allocatable_r16p_4d~5->interface~allocate_variable~5 proc~assign_allocatable_r16p_5d~5 assign_allocatable_R16P_5D proc~assign_allocatable_r16p_5d~5->interface~allocate_variable~5 proc~assign_allocatable_r16p_6d~5 assign_allocatable_R16P_6D proc~assign_allocatable_r16p_6d~5->interface~allocate_variable~5 proc~assign_allocatable_r16p_7d~5 assign_allocatable_R16P_7D proc~assign_allocatable_r16p_7d~5->interface~allocate_variable~5 proc~assign_allocatable_r4p_1d~5 assign_allocatable_R4P_1D proc~assign_allocatable_r4p_1d~5->interface~allocate_variable~5 proc~assign_allocatable_r4p_2d~5 assign_allocatable_R4P_2D proc~assign_allocatable_r4p_2d~5->interface~allocate_variable~5 proc~assign_allocatable_r4p_3d~5 assign_allocatable_R4P_3D proc~assign_allocatable_r4p_3d~5->interface~allocate_variable~5 proc~assign_allocatable_r4p_4d~5 assign_allocatable_R4P_4D proc~assign_allocatable_r4p_4d~5->interface~allocate_variable~5 proc~assign_allocatable_r4p_5d~5 assign_allocatable_R4P_5D proc~assign_allocatable_r4p_5d~5->interface~allocate_variable~5 proc~assign_allocatable_r4p_6d~5 assign_allocatable_R4P_6D proc~assign_allocatable_r4p_6d~5->interface~allocate_variable~5 proc~assign_allocatable_r4p_7d~5 assign_allocatable_R4P_7D proc~assign_allocatable_r4p_7d~5->interface~allocate_variable~5 proc~assign_allocatable_r8p_1d~5 assign_allocatable_R8P_1D proc~assign_allocatable_r8p_1d~5->interface~allocate_variable~5 proc~assign_allocatable_r8p_2d~5 assign_allocatable_R8P_2D proc~assign_allocatable_r8p_2d~5->interface~allocate_variable~5 proc~assign_allocatable_r8p_3d~5 assign_allocatable_R8P_3D proc~assign_allocatable_r8p_3d~5->interface~allocate_variable~5 proc~assign_allocatable_r8p_4d~5 assign_allocatable_R8P_4D proc~assign_allocatable_r8p_4d~5->interface~allocate_variable~5 proc~assign_allocatable_r8p_5d~5 assign_allocatable_R8P_5D proc~assign_allocatable_r8p_5d~5->interface~allocate_variable~5 proc~assign_allocatable_r8p_6d~5 assign_allocatable_R8P_6D proc~assign_allocatable_r8p_6d~5->interface~allocate_variable~5 proc~assign_allocatable_r8p_7d~5 assign_allocatable_R8P_7D proc~assign_allocatable_r8p_7d~5->interface~allocate_variable~5 interface~assign_allocatable~5 assign_allocatable interface~assign_allocatable~5->proc~assign_allocatable_i1p_1d~5 interface~assign_allocatable~5->proc~assign_allocatable_i1p_2d~5 interface~assign_allocatable~5->proc~assign_allocatable_i1p_3d~5 interface~assign_allocatable~5->proc~assign_allocatable_i1p_4d~5 interface~assign_allocatable~5->proc~assign_allocatable_i1p_5d~5 interface~assign_allocatable~5->proc~assign_allocatable_i1p_6d~5 interface~assign_allocatable~5->proc~assign_allocatable_i1p_7d~5 interface~assign_allocatable~5->proc~assign_allocatable_i2p_1d~5 interface~assign_allocatable~5->proc~assign_allocatable_i2p_2d~5 interface~assign_allocatable~5->proc~assign_allocatable_i2p_3d~5 interface~assign_allocatable~5->proc~assign_allocatable_i2p_4d~5 interface~assign_allocatable~5->proc~assign_allocatable_i2p_5d~5 interface~assign_allocatable~5->proc~assign_allocatable_i2p_6d~5 interface~assign_allocatable~5->proc~assign_allocatable_i2p_7d~5 interface~assign_allocatable~5->proc~assign_allocatable_i4p_1d~5 interface~assign_allocatable~5->proc~assign_allocatable_i4p_2d~5 interface~assign_allocatable~5->proc~assign_allocatable_i4p_3d~5 interface~assign_allocatable~5->proc~assign_allocatable_i4p_4d~5 interface~assign_allocatable~5->proc~assign_allocatable_i4p_5d~5 interface~assign_allocatable~5->proc~assign_allocatable_i4p_6d~5 interface~assign_allocatable~5->proc~assign_allocatable_i4p_7d~5 interface~assign_allocatable~5->proc~assign_allocatable_i8p_1d~5 interface~assign_allocatable~5->proc~assign_allocatable_i8p_2d~5 interface~assign_allocatable~5->proc~assign_allocatable_i8p_3d~5 interface~assign_allocatable~5->proc~assign_allocatable_i8p_4d~5 interface~assign_allocatable~5->proc~assign_allocatable_i8p_5d~5 interface~assign_allocatable~5->proc~assign_allocatable_i8p_6d~5 interface~assign_allocatable~5->proc~assign_allocatable_i8p_7d~5 interface~assign_allocatable~5->proc~assign_allocatable_r4p_1d~5 interface~assign_allocatable~5->proc~assign_allocatable_r4p_2d~5 interface~assign_allocatable~5->proc~assign_allocatable_r4p_3d~5 interface~assign_allocatable~5->proc~assign_allocatable_r4p_4d~5 interface~assign_allocatable~5->proc~assign_allocatable_r4p_5d~5 interface~assign_allocatable~5->proc~assign_allocatable_r4p_6d~5 interface~assign_allocatable~5->proc~assign_allocatable_r4p_7d~5 interface~assign_allocatable~5->proc~assign_allocatable_r8p_1d~5 interface~assign_allocatable~5->proc~assign_allocatable_r8p_2d~5 interface~assign_allocatable~5->proc~assign_allocatable_r8p_3d~5 interface~assign_allocatable~5->proc~assign_allocatable_r8p_4d~5 interface~assign_allocatable~5->proc~assign_allocatable_r8p_5d~5 interface~assign_allocatable~5->proc~assign_allocatable_r8p_6d~5 interface~assign_allocatable~5->proc~assign_allocatable_r8p_7d~5

Source Code

   subroutine get_memory_info(mem_free, mem_total)
   !< Get the current CPU-memory status.
   !< @NOTE Currently implemented only per Unix/Linux based systems. Return -1 if failing.
   !<```fortran
   !< use penf
   !< real(R8P), allocatable :: a(:,:,:)
   !< integer(I8P)           :: mem_free_1, mem_free_2, mem_total
   !< logical                :: is_present
   !< integer(I4P)           :: n, i, j, k
   !< call get_memory_info(mem_free_1, mem_total)
   !< inquire(file='/proc/meminfo', exist=is_present)
   !< if (is_present) then
   !<    n = 800
   !<    allocate(a(1:n,1:n,1:n))
   !< else
   !<    print*, .true.
   !<    stop
   !< endif
   !< a = 1._R8P
   !< do k=2, n
   !< do j=2, n
   !< do i=2, n
   !<    a(i,j,k) = 1._R8P / 2._R8P * exp(a(i-1,j,k)) - a(i-1,j,k)
   !< enddo
   !< enddo
   !< enddo
   !< call get_memory_info(mem_free_2, mem_total)
   !< print*, mem_free_1 > mem_free_2
   !<```
   !=> T <<<
   integer(I8P), intent(out) :: mem_free   !< Free memory.
   integer(I8P), intent(out) :: mem_total  !< Total memory.
   logical                   :: is_present !< Logical flag to check the presence of '/proc/meminfo' system file.
   integer(I4P)              :: file_unit  !< File unit.
   character(999)            :: line       !< Line buffer.

   mem_free  = -1_I8P
   mem_total = -1_I8P
   inquire(file='/proc/meminfo', exist=is_present)
   if (is_present) then
      open(newunit=file_unit, file='/proc/meminfo', status='old')
      read(file_unit, '(A)') line ! total memory
      call parse_line(l=line, v=mem_total)
      read(file_unit, '(A)') line ! free memory
      call parse_line(l=line, v=mem_free)
      close(file_unit)
   endif
   contains
      subroutine parse_line(l,v)
      !< Parse input line and return memory value.
      character(*), intent(in)  :: l      !< Input line.
      integer(I8P), intent(out) :: v      !< Memory value.
      integer(I4P)              :: colon  !< Index of colon (name/value separator) char in line.
      character(:), allocatable :: memval !< Memory value, string.

      colon = index(l, ':')                 ! find name/value separator position
      memval = trim(adjustl(l(colon+1:)))   ! get memory value, string
      memval = trim(memval(:len(memval)-2)) ! remove memory unit, e.g. kb
      v = cton(str=memval, knd=1_I8P)       ! cast to string to integer
      endsubroutine parse_line
   endsubroutine get_memory_info