付録  AS/400のポインターサイズ
RPGプログラマーの為のC言語講座

AS/400はRISCになってから64bitOSと言われています。

ここではAS/400のポインターサイズはいくつなのか、実際に調べてみましょう?


/*---------------------------------------------------------------*/
/* PROGRAM-ID  : POINT7                                          */
/* REMARKS     : ポインターの長さは?                           */
/* AUTHOR      : Y.Ide                                           */
/* DATE-WRITEN : 98/04/28                                        */
/* VERSION     : 01.00 ORIGINAL                                  */
/*---------------------------------------------------------------*/
/*                                                               */

#include

void main()
{
/*ポインターの定義*/
char *ptr_a = "ABCD";
char *ptr_b ;

/*他の型の定義*/
short s;
int   i;
long  l;
/* long long は OS/400 V430のみ有効、他のバージョンではエラー */
long long ll;

 printf("POINTER LENGTH = %d \n",sizeof(ptr_a));
 printf("POINTER DATA   = %p \n",ptr_a);

 printf("SHORT     SIZE = %d \n",sizeof(s));
 printf("INT       SIZE = %d \n",sizeof(i));
 printf("LONG      SIZE = %d \n",sizeof(l));
 printf("LONG LONG SIZE = %d \n",sizeof(ll));

}

sizeof関数は、その型のもつサイズを調べることができる関数です。
上記の ptr_a のサイズを画面に表示することが可能です。
実行結果は以下の様になるでしょう


   POINTER LENGTH = 16                                                          
   POINTER DATA   = SPP:0000 :1aefQPADEV0004IDE       043092 :e00:0:23e         
   SHORT     SIZE = 2                                                           
   INT       SIZE = 4                                                           
   LONG      SIZE = 4                                                           
   LONG LONG SIZE = 8                                                           
    端末セッションを終了するためには,実行キーを押してください。                
                                                                                

sizeof関数で調べた値の結果が、POINTER LENGTH = 16 になっています。
と言うことは、AS/400のポインターのサイズは16バイト(16*8=128ビット) と言うことがわかります。

ポインターが128ビットと言うことは、OSとしては128ビットOS であるといってもいいのではと言う気もしますがいまのところ、POWER_PCのCPUが64bitなので、64bitOSということになっている のでしょうね。

他の多くのプラットフォームOSがやっと、32bitから64bitに対応しているのに比べ、OS/400自体すでに128bitとは あらためて、AS/400ってすごいマシンということがわかりますね。

今後、96bitとか、128bitとか言う CPU の時代になってやっと、OS/400にH/Wが追いついてくるんでしょう。

WINDOWSその他の32bit(8*4)OSでは、ポインターの値をインテジャーに保管するようなコーディングをたまに見かけますが OS/400では、ポインターが16バイトもあるので、とても 4バイトのインテジャーに保管はできません。

V430から、long longと言う型が追加されましたが、それでも、8バイトでまだ半分しかありません。

こういうお作法の悪いコーディングをする人にかぎって、”OS/400 ではどうして出来ないんだ”などと文句を言いがちです。

なぜできないか、ちょっと考えればすぐわかりそうなものなのですが....