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 ではどうして出来ないんだ”などと文句を言いがちです。
なぜできないか、ちょっと考えればすぐわかりそうなものなのですが....
|