【问题标题】:does reverse indexing result in contiguous memory?反向索引会导致连续内存吗?
【发布时间】:2023-03-24 20:35:01
【问题描述】:

假设我有一个矩阵声明为

double precision, dimension(100,50) :: a

是节

a(:,50:48:-1)

在内存中连续?

【问题讨论】:

    标签: multidimensional-array indexing fortran


    【解决方案1】:

    不,子阵列a(:,50:48:-1) 不是连续的,尽管它占用了连续的存储空间。许多情况需要创建一个临时数组。

     real, dimension(100,50) :: a
    
     call sub(a(:,50:48:-1))
    
    contains
      subroutine sub(b)
        real :: b(:,:)
        print *, is_contiguous(b)
      end subroutine
    end
    

    > ifort contig.f90
    > ./a.out
     F
    

    【讨论】:

    • 因为元素在内存中的顺序不正确。子数组(或数组b)的元素不是简单的列优先顺序。
    猜你喜欢
    • 2011-11-09
    • 2018-04-21
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多