1

我正在做一个项目,我在第 1、第 2 和第 3 维中有许多相同大小的数组,尽管第 4 维中的大小可能会有所不同。

我想通过构造一个连接这些数组的指针来对这些数组进行分组。

为了不那么抽象,假设我有 2 个数组:

A (size: N1 x N2 x N3 x N4a)
B (size: N1 x N2 x N3 x N4b)

在项目的早期版本中,这些数组被复制到大小为 C 的数组 C 中N1 x N2 x N3 x (N4a + N4b),然后将其传递给子例程以在该数组上执行 ffts。

我想避免这种复制操作并构造一个指针,该指针p将包含与先前版本中的数组 C 相同的数据,但没有显式复制和额外的内存分配。

这在 Fortran 中可能吗?

4

1 回答 1

1

不,一个指针不能同时指向两个独立的对象。

根据您的情况,可能可行的是从一个维度为 (N1,N2,N3,N4a+N4b) 的数组开始,然后将 A 和 B 关联到该相关部分(指针、存储或参数)以某种方式初始的大数组。

REAL, TARGET :: c(N1,N2,N3,N4a+N4b)
REAL, POINTER :: a(:,:,:,:)
REAL, POINTER :: b(:,:,:,:)

a => c(:,:,:,:n4a)
b => c(:,:,:,n4a+1:)
! Go forth and do things with a and b.

! Then later do things with c.

在黑暗时期,在 Fortran 进行任何类型的动态内存分配之前,这种“一个数组统治他们”的方式很普遍,然后被分割出来。

于 2013-11-15T02:10:31.433 回答