在 Chapel 中,似乎可以使用符号来声明一个数组[][]
。这看起来与其他语言中的“数组数组”非常相似,所以我想知道它是否是所谓的“锯齿状数组”,每个子数组在内存中独立分配?例如,在下面的代码中,在内存a[0][..]
中a[1][..]
是否一定是连续的?(我在这里感兴趣的是,使用此类是否[][]
可能比[,]
非连续内存效率低。)
proc test( D1, D2 )
{
var a: [D1][D2] int; // "jagged" array?
var b: [D1, D2] int; // I assume this is a rectanguar (contiguous) array
for i in D1 do
for j in D2 do
a[i][j] = i * 100 + j;
for (i, j) in b.domain do
b[i, j] = i * 100 + j;
var lo = D1.low, hi = D1.high;
writeln( "a = ", a );
writeln( "a[ lo ] = ", a[ lo ] );
writeln( "a[ hi ] = ", a[ hi ] );
writeln();
writeln( "b = ", b );
writeln( "b[ lo, .. ] = ", b[ lo, .. ] );
writeln( "b[ hi, .. ] = ", b[ hi, .. ] );
}
test( 0..1, 1..3 );
$ chpl test.chpl
$ ./a.out
a = 1 2 3 101 102 103
a[ lo ] = 1 2 3
a[ hi ] = 101 102 103
b = 1 2 3
101 102 103
b[ lo, .. ] = 1 2 3
b[ hi, .. ] = 101 102 103
一个相关的问题是:是否有任何方法或命令可以知道给定变量或数组元素的内存位置(地址)(以获取有关内存分配的信息)?