ORANGE pico の配列がメモリにどのように格納されているかを観察する

[ORANGE pico](http://www.picosoft.co.jp/orange/) の配列のデータがメモリ上でどのように格納されているかを観察してみた。

# これまでにわかっていること

[以前の記事](https://qiita.com/mikecat_mixc/items/ac1905163f9f04c7e29a#%E3%81%BE%E3%81%A8%E3%82%81)などで、以下のことがわかっている。

* 変数名の20バイト前に、変数のデータが4バイトリトルエンディアンで格納されている。
* 配列では同じ変数名が4個使われ、データのアドレスや要素数の情報が格納されている。
* 配列の1要素には16ビット符号付き整数しか格納できない。
* 3次元配列までは使えるが、4次元配列を作ろうとすると Syntax error になる。

# プログラム

まず、観察用に1次元、2次元、3次元の配列をそれぞれ用意する。
要素数をそれぞれ変え、どの要素かがわかりやすいデータを格納する。

次に、もう1個配列を用意し、負の添字を使用して適当な量のダンプを行う。
今回は配列の観察のみが目的であるため、RAMの最初からダンプしなくてよい。
さらに、最初から [CyberChef](https://gchq.github.io/CyberChef/) の To Hexdump の形式でUARTに出力するようにした。(改行コードはLF)

```
10 dim onedarray(7)
20 dim twodarray(6,5)
30 dim threedarray(4,3,2)
40 for i=0 to 7
50 onedarray(i) = &H1000 + i
60 next
70 for i=0 to 6
80 for j=0 to 5
90 twodarray(i,j) = &H2000 + &H10 * i + j
100 next
110 next
120 for i=0 to 4
130 for j=0 to 3
140 for k=0 to 2
150 threedarray(i,j,k) = &H3000 + &H100 * i + &H10 * j + k
160 next
170 next
180 next
190 size=2048:offset=0:dim checker(0)
200 for i=0 to size-1 step 16
210 uartput 1,format$("%08x  ", i)
220 for j=0 to 7
230 value=checker(-size/2+i/2+j-offset/2)
240 uartput 1,format$("%02x %02x ",value & &HFF, (value>>8) & &HFF)
250 next
260 uartput 1," |"
270 for j=0 to 15
280 value=(checker(-size/2+i/2+j/2-offset/2)>>((j%2)*8)) & &HFF
290 if &H20<=value && value<&H7F then uartput 1,chr$(value) else uartput 1,"."
300 next
310 uartput 1,"|"+chr$(&H0A)
320 next
```

# 実行結果

以下のダンプ結果が得られた。

<details><summary>ダンプ結果全体</summary>

```
00000000  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000040  00 00 00 00 00 00 00 00 18 d6 00 a0 01 00 00 00  |................|
00000050  50 00 00 00 06 00 00 00 20 d6 00 a0 00 00 00 00  |P....... .......|
00000060  60 d7 00 a0 01 00 00 00 00 00 00 00 00 00 00 00  |`...............|
00000070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000080  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000090  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000a0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000b0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000c0  00 00 00 00 00 00 00 00 00 00 00 00 d0 dc 00 a0  |................|
000000d0  08 dd 00 a0 40 dd 00 a0 90 dd 00 a0 00 00 00 00  |....@...........|
000000e0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000000f0  00 00 00 00 00 00 00 00 00 00 00 00 68 dd 00 a0  |............h...|
00000100  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000110  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000120  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000130  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000140  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000150  00 00 00 00 00 00 00 00 00 00 00 00 88 de 00 a0  |................|
00000160  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000170  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000180  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000190  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000001a0  00 00 00 00 00 00 00 00 78 d7 00 a0 01 00 00 00  |........x.......|
000001b0  14 00 00 00 00 00 00 00 80 d7 00 a0 00 00 00 00  |................|
000001c0  d0 d7 00 a0 01 00 00 00 00 00 00 00 00 00 00 00  |................|
000001d0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000001e0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000001f0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000200  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000210  00 00 00 00 00 00 00 00 e8 d7 00 a0 01 00 00 00  |................|
00000220  14 00 00 00 04 00 00 00 f0 d7 00 a0 00 00 00 00  |................|
00000230  40 d8 00 a0 01 00 00 00 00 00 00 00 d0 da 00 a0  |@...............|
00000240  c8 dd 00 a0 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000250  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000260  00 00 00 00 00 00 00 00 00 00 00 00 b0 d9 00 a0  |................|
00000270  00 00 00 00 00 00 00 00 00 00 00 00 10 dc 00 a0  |................|
00000280  00 00 00 00 00 00 00 00 58 d8 00 a0 01 00 00 00  |........X.......|
00000290  14 00 00 00 04 00 00 00 60 d8 00 a0 00 00 00 00  |........`.......|
000002a0  b0 d8 00 a0 01 00 00 00 00 00 00 00 00 db 00 a0  |................|
000002b0  f0 dd 00 a0 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000002c0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000002d0  00 00 00 00 00 00 00 00 00 00 00 00 e0 d9 00 a0  |................|
000002e0  00 00 00 00 00 00 00 00 00 00 00 00 40 dc 00 a0  |............@...|
000002f0  00 00 00 00 00 00 00 00 c8 d8 00 a0 01 00 00 00  |................|
00000300  14 00 00 00 04 00 00 00 d0 d8 00 a0 00 00 00 00  |................|
00000310  20 d9 00 a0 01 00 00 00 00 00 00 00 30 db 00 a0  | ...........0...|
00000320  18 de 00 a0 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000330  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
00000340  00 00 00 00 00 00 00 00 00 00 00 00 10 da 00 a0  |................|
00000350  00 00 00 00 00 00 00 00 00 00 00 00 70 dc 00 a0  |............p...|
00000360  00 00 00 00 00 00 00 00 38 d9 00 a0 01 00 00 00  |........8.......|
00000370  14 00 00 00 04 00 00 00 40 d9 00 a0 00 00 00 00  |........@.......|
00000380  90 d9 00 a0 01 00 00 00 00 00 00 00 60 db 00 a0  |............`...|
00000390  40 de 00 a0 00 00 00 00 00 00 00 00 00 00 00 00  |@...............|
000003a0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................|
000003b0  00 00 00 00 00 00 00 00 00 00 00 00 40 da 00 a0  |............@...|
000003c0  00 00 00 00 00 00 00 00 00 00 00 00 a0 dc 00 a0  |................|
000003d0  00 00 00 00 00 00 00 00 a8 d9 00 a0 01 00 00 00  |................|
000003e0  00 10 01 10 02 10 03 10 04 10 05 10 06 10 07 10  |................|
000003f0  c0 d9 00 a0 01 00 00 00 c8 d9 00 a0 98 d9 00 a0  |................|
00000400  00 00 00 00 00 00 00 00 d8 d9 00 a0 01 00 00 00  |................|
00000410  6f 6e 65 64 61 72 72 61 79 00 00 a0 00 00 00 00  |onedarray.......|
00000420  f0 d9 00 a0 01 00 00 00 f8 d9 00 a0 08 00 00 00  |................|
00000430  00 00 00 00 00 00 00 00 08 da 00 a0 01 00 00 00  |................|
00000440  6f 6e 65 64 61 72 72 61 79 00 00 00 00 00 00 00  |onedarray.......|
00000450  20 da 00 a0 01 00 00 00 28 da 00 a0 00 00 00 00  | .......(.......|
00000460  00 00 00 00 00 00 00 00 38 da 00 a0 01 00 00 00  |........8.......|
00000470  6f 6e 65 64 61 72 72 61 79 00 00 00 00 00 00 00  |onedarray.......|
00000480  50 da 00 a0 01 00 00 00 58 da 00 a0 00 00 00 00  |P.......X.......|
00000490  00 00 00 00 00 00 00 00 68 da 00 a0 01 00 00 00  |........h.......|
000004a0  6f 6e 65 64 61 72 72 61 79 00 00 00 00 00 00 00  |onedarray.......|
000004b0  c8 da 00 a0 01 00 00 00 00 20 10 20 20 20 30 20  |......... .   0 |
000004c0  40 20 50 20 60 20 01 20 11 20 21 20 31 20 41 20  |@ P ` . . ! 1 A |
000004d0  51 20 61 20 02 20 12 20 22 20 32 20 42 20 52 20  |Q a . . " 2 B R |
000004e0  62 20 03 20 13 20 23 20 33 20 43 20 53 20 63 20  |b . . # 3 C S c |
000004f0  04 20 14 20 24 20 34 20 44 20 54 20 64 20 05 20  |. . $ 4 D T d . |
00000500  15 20 25 20 35 20 45 20 55 20 65 20 00 00 00 00  |. % 5 E U e ....|
00000510  e0 da 00 a0 01 00 00 00 e8 da 00 a0 70 da 00 a0  |............p...|
00000520  00 00 00 00 00 00 00 00 f8 da 00 a0 01 00 00 00  |................|
00000530  74 77 6f 64 61 72 72 61 79 00 00 00 00 00 00 00  |twodarray.......|
00000540  10 db 00 a0 01 00 00 00 18 db 00 a0 07 00 00 00  |................|
00000550  00 00 00 00 00 00 00 00 28 db 00 a0 01 00 00 00  |........(.......|
00000560  74 77 6f 64 61 72 72 61 79 00 00 00 00 00 00 00  |twodarray.......|
00000570  40 db 00 a0 01 00 00 00 48 db 00 a0 06 00 00 00  |@.......H.......|
00000580  00 00 00 00 00 00 00 00 58 db 00 a0 01 00 00 00  |........X.......|
00000590  74 77 6f 64 61 72 72 61 79 00 00 a0 00 00 00 00  |twodarray.......|
000005a0  70 db 00 a0 01 00 00 00 78 db 00 a0 00 00 00 00  |p.......x.......|
000005b0  00 00 00 00 00 00 00 00 88 db 00 a0 01 00 00 00  |................|
000005c0  74 77 6f 64 61 72 72 61 79 00 00 00 00 00 00 00  |twodarray.......|
000005d0  08 dc 00 a0 01 00 00 00 00 30 00 31 00 32 00 33  |.........0.1.2.3|
000005e0  00 34 10 30 10 31 10 32 10 33 10 34 20 30 20 31  |.4.0.1.2.3.4 0 1|
000005f0  20 32 20 33 20 34 30 30 30 31 30 32 30 33 30 34  | 2 3 40001020304|
00000600  01 30 01 31 01 32 01 33 01 34 11 30 11 31 11 32  |.0.1.2.3.4.0.1.2|
00000610  11 33 11 34 21 30 21 31 21 32 21 33 21 34 31 30  |.3.4!0!1!2!3!410|
00000620  31 31 31 32 31 33 31 34 02 30 02 31 02 32 02 33  |11121314.0.1.2.3|
00000630  02 34 12 30 12 31 12 32 12 33 12 34 22 30 22 31  |.4.0.1.2.3.4"0"1|
00000640  22 32 22 33 22 34 32 30 32 31 32 32 32 33 32 34  |"2"3"42021222324|
00000650  20 dc 00 a0 01 00 00 00 28 dc 00 a0 90 db 00 a0  | .......(.......|
00000660  00 00 00 00 00 00 00 00 38 dc 00 a0 01 00 00 00  |........8.......|
00000670  74 68 72 65 65 64 61 72 72 61 79 00 00 00 00 00  |threedarray.....|
00000680  50 dc 00 a0 01 00 00 00 58 dc 00 a0 05 00 00 00  |P.......X.......|
00000690  00 00 00 00 00 00 00 00 68 dc 00 a0 01 00 00 00  |........h.......|
000006a0  74 68 72 65 65 64 61 72 72 61 79 00 00 00 00 00  |threedarray.....|
000006b0  80 dc 00 a0 01 00 00 00 88 dc 00 a0 04 00 00 00  |................|
000006c0  00 00 00 00 00 00 00 00 98 dc 00 a0 01 00 00 00  |................|
000006d0  74 68 72 65 65 64 61 72 72 61 79 00 00 00 00 00  |threedarray.....|
000006e0  b0 dc 00 a0 01 00 00 00 b8 dc 00 a0 03 00 00 00  |................|
000006f0  00 00 00 00 00 00 00 00 c8 dc 00 a0 01 00 00 00  |................|
00000700  74 68 72 65 65 64 61 72 72 61 79 00 00 00 00 00  |threedarray.....|
00000710  e0 dc 00 a0 01 00 00 00 e8 dc 00 a0 10 07 00 00  |................|
00000720  00 00 00 00 00 00 00 00 f0 dc 00 a0 01 00 00 00  |................|
00000730  69 00 00 00 00 00 00 00 00 dd 00 a0 00 00 00 00  |i...............|
00000740  69 00 00 00 00 00 00 00 18 dd 00 a0 01 00 00 00  |i...............|
00000750  20 dd 00 a0 02 00 00 00 00 00 00 00 00 00 00 00  | ...............|
00000760  28 dd 00 a0 01 00 00 00 6a 00 00 00 00 00 00 00  |(.......j.......|
00000770  38 dd 00 a0 00 00 00 00 6b 00 00 00 00 00 00 00  |8.......k.......|
00000780  50 dd 00 a0 01 00 00 00 58 dd 00 a0 03 00 00 00  |P.......X.......|
00000790  00 00 00 00 00 00 00 00 60 dd 00 a0 01 00 00 00  |........`.......|
000007a0  6b 00 00 00 00 00 00 00 78 dd 00 a0 01 00 00 00  |k.......x.......|
000007b0  80 dd 00 a0 00 08 00 00 00 00 00 00 00 00 00 00  |................|
000007c0  88 dd 00 a0 01 00 00 00 73 69 7a 65 00 00 00 00  |........size....|
000007d0  a0 dd 00 a0 01 00 00 00 a8 dd 00 a0 00 00 00 00  |................|
000007e0  00 00 00 00 00 00 00 00 b0 dd 00 a0 01 dd 00 a0  |................|
000007f0  6f 66 66 73 65 74 00 00 c0 dd 00 a0 01 00 00 00  |offset..........|
```

</details>

# 配列の観察

## 1次元配列

```
000003e0  00 10 01 10 02 10 03 10 04 10 05 10 06 10 07 10  |................|
000003f0  c0 d9 00 a0 01 00 00 00 c8 d9 00 a0 98 d9 00 a0  |................|
00000400  00 00 00 00 00 00 00 00 d8 d9 00 a0 01 00 00 00  |................|
00000410  6f 6e 65 64 61 72 72 61 79 00 00 a0 00 00 00 00  |onedarray.......|
00000420  f0 d9 00 a0 01 00 00 00 f8 d9 00 a0 08 00 00 00  |................|
00000430  00 00 00 00 00 00 00 00 08 da 00 a0 01 00 00 00  |................|
00000440  6f 6e 65 64 61 72 72 61 79 00 00 00 00 00 00 00  |onedarray.......|
00000450  20 da 00 a0 01 00 00 00 28 da 00 a0 00 00 00 00  | .......(.......|
00000460  00 00 00 00 00 00 00 00 38 da 00 a0 01 00 00 00  |........8.......|
00000470  6f 6e 65 64 61 72 72 61 79 00 00 00 00 00 00 00  |onedarray.......|
00000480  50 da 00 a0 01 00 00 00 58 da 00 a0 00 00 00 00  |P.......X.......|
00000490  00 00 00 00 00 00 00 00 68 da 00 a0 01 00 00 00  |........h.......|
000004a0  6f 6e 65 64 61 72 72 61 79 00 00 00 00 00 00 00  |onedarray.......|
000004b0  c8 da 00 a0 01 00 00 00 00 20 10 20 20 20 30 20  |......... .   0 |
```

4個の変数名に対応するデータとして、順にデータのアドレス `0xa000d998`、要素数 `8`、ゼロ、ゼロが格納されている。

配列のデータは、`onedarray(0)` から `onedarray(7)` が順に格納されている。

## 2次元配列

```
000004b0  c8 da 00 a0 01 00 00 00 00 20 10 20 20 20 30 20  |......... .   0 |
000004c0  40 20 50 20 60 20 01 20 11 20 21 20 31 20 41 20  |@ P ` . . ! 1 A |
000004d0  51 20 61 20 02 20 12 20 22 20 32 20 42 20 52 20  |Q a . . " 2 B R |
000004e0  62 20 03 20 13 20 23 20 33 20 43 20 53 20 63 20  |b . . # 3 C S c |
000004f0  04 20 14 20 24 20 34 20 44 20 54 20 64 20 05 20  |. . $ 4 D T d . |
00000500  15 20 25 20 35 20 45 20 55 20 65 20 00 00 00 00  |. % 5 E U e ....|
00000510  e0 da 00 a0 01 00 00 00 e8 da 00 a0 70 da 00 a0  |............p...|
00000520  00 00 00 00 00 00 00 00 f8 da 00 a0 01 00 00 00  |................|
00000530  74 77 6f 64 61 72 72 61 79 00 00 00 00 00 00 00  |twodarray.......|
00000540  10 db 00 a0 01 00 00 00 18 db 00 a0 07 00 00 00  |................|
00000550  00 00 00 00 00 00 00 00 28 db 00 a0 01 00 00 00  |........(.......|
00000560  74 77 6f 64 61 72 72 61 79 00 00 00 00 00 00 00  |twodarray.......|
00000570  40 db 00 a0 01 00 00 00 48 db 00 a0 06 00 00 00  |@.......H.......|
00000580  00 00 00 00 00 00 00 00 58 db 00 a0 01 00 00 00  |........X.......|
00000590  74 77 6f 64 61 72 72 61 79 00 00 a0 00 00 00 00  |twodarray.......|
000005a0  70 db 00 a0 01 00 00 00 78 db 00 a0 00 00 00 00  |p.......x.......|
000005b0  00 00 00 00 00 00 00 00 88 db 00 a0 01 00 00 00  |................|
000005c0  74 77 6f 64 61 72 72 61 79 00 00 00 00 00 00 00  |twodarray.......|
000005d0  08 dc 00 a0 01 00 00 00 00 30 00 31 00 32 00 33  |.........0.1.2.3|
```

4個の変数名に対応するデータとして、順にデータのアドレス `0xa000da70`、最初の要素数 `7`、2番目の要素数 `6`、ゼロが格納されている。

配列のデータは、まず `twodarray(0,0)` から `twodarray(6,0)` が順に格納されている。
続いて `twodarray(0,1)` から `twodarray(6,1)` が順に格納されている。
その後も、同様に `twodarray(i,5)` までが順に格納されている。


## 3次元配列

```
000005d0  08 dc 00 a0 01 00 00 00 00 30 00 31 00 32 00 33  |.........0.1.2.3|
000005e0  00 34 10 30 10 31 10 32 10 33 10 34 20 30 20 31  |.4.0.1.2.3.4 0 1|
000005f0  20 32 20 33 20 34 30 30 30 31 30 32 30 33 30 34  | 2 3 40001020304|
00000600  01 30 01 31 01 32 01 33 01 34 11 30 11 31 11 32  |.0.1.2.3.4.0.1.2|
00000610  11 33 11 34 21 30 21 31 21 32 21 33 21 34 31 30  |.3.4!0!1!2!3!410|
00000620  31 31 31 32 31 33 31 34 02 30 02 31 02 32 02 33  |11121314.0.1.2.3|
00000630  02 34 12 30 12 31 12 32 12 33 12 34 22 30 22 31  |.4.0.1.2.3.4"0"1|
00000640  22 32 22 33 22 34 32 30 32 31 32 32 32 33 32 34  |"2"3"42021222324|
00000650  20 dc 00 a0 01 00 00 00 28 dc 00 a0 90 db 00 a0  | .......(.......|
00000660  00 00 00 00 00 00 00 00 38 dc 00 a0 01 00 00 00  |........8.......|
00000670  74 68 72 65 65 64 61 72 72 61 79 00 00 00 00 00  |threedarray.....|
00000680  50 dc 00 a0 01 00 00 00 58 dc 00 a0 05 00 00 00  |P.......X.......|
00000690  00 00 00 00 00 00 00 00 68 dc 00 a0 01 00 00 00  |........h.......|
000006a0  74 68 72 65 65 64 61 72 72 61 79 00 00 00 00 00  |threedarray.....|
000006b0  80 dc 00 a0 01 00 00 00 88 dc 00 a0 04 00 00 00  |................|
000006c0  00 00 00 00 00 00 00 00 98 dc 00 a0 01 00 00 00  |................|
000006d0  74 68 72 65 65 64 61 72 72 61 79 00 00 00 00 00  |threedarray.....|
000006e0  b0 dc 00 a0 01 00 00 00 b8 dc 00 a0 03 00 00 00  |................|
000006f0  00 00 00 00 00 00 00 00 c8 dc 00 a0 01 00 00 00  |................|
00000700  74 68 72 65 65 64 61 72 72 61 79 00 00 00 00 00  |threedarray.....|
00000710  e0 dc 00 a0 01 00 00 00 e8 dc 00 a0 10 07 00 00  |................|
```

4個の変数名に対応するデータとして、順にデータのアドレス `0xa000db90`、最初の要素数 `5`、2番目の要素数 `4`、3番目の要素数 `3` が格納されている。

配列のデータは、まず `threedarray(0,0,0)` から `threedarray(4,0,0)` が順に格納されている。
続いて、`threedarray(0,1,0)` から `threedarray(4,1,0)` が順に格納されている。
さらに、`threedarray(i,2,0)` および `threedarray(i,3,0)` も同様に順に格納されている。
その後、`threedarray(0,0,1)` から `threedarray(4,0,1)` が順に格納され、続いて `threedarray(i,1,1)` から `threedarray(i,3,1)` も順に格納されている。
そして、続いて `threedarray(i,j,2)` が同様に格納されている。

# まとめ

配列変数の情報は、配列の変数名4個を用い、順にデータの先頭アドレス、1番目の要素数、2番目の要素数、3番目の要素数を変数のデータとして格納する。
なお、要素数はそれぞれ `dim` で用いた値に1を足した値となっている。
要素数の枠は `dim` で指定する順に前から順に用いられ、3次元未満の配列で使わない要素数には `0` が入る。

配列のデータは1要素につき2バイト、リトルエンディアンで、同じ配列のデータはメモリ上に連続して格納される。
添字の小さいデータがメモリ上で先に、添字の大きいデータがメモリ上で後に格納される。
多次元 (2次元、3次元) 配列の場合、`dim` で後 (右) に指定する要素数は、「先 (左) に指定する要素数の配列」を要素とする配列の要素数として動作する。
すなわち、要素数 (`dim` で指定した値 + 1) が左から $a$、$b$ の2次元配列では、それぞれの添字を「1」変えると、メモリ上の位置はそれぞれ $2$ バイト、$2a$ バイト変化する。
要素数が左から $a$、$b$、$c$ の3次元配列では、それぞれの添字を「1」変えると、メモリ上の位置はそれぞれ $2$ バイト、$2a$ バイト、$2ab$ バイト変化する。