作業用としてメモリを割り振ることができる最大のサイズは
16MB ( 16711600 バイト ) である、という制限があることは良く知られている。
つまり一時的にIFS のファイルを読んで格納できるサイズは 16MB までに限られるのである。
このことは結構、いろいろな業務に制約を与えてきた。
例えば、
- 印刷スプールをオープンして読み込むことができるのは 16MB まで。
- アップロードできるファイルは 16MB まで。
のような具合であり、これは製品にも制約を与える要因となってきたのである。
しかし「ILE Concept」のひとつとしてテラ・スペースの利用を指定すると
コンパイラーのパラメータを変更してコンパイルするだけで、
16MB から最大 2GB ( 2147483408 バイト ) まで一気に拡張することができるのである。
【 TESTMLC : サンプル・メモリー拡張 】
0001.00 #include <stdio.h>
0002.00 #include <stdlib.h>
0003.00 #include <string.h>
0004.00
0005.00 #define TRUE 0
0006.00 #define FALSE -1
0007.00 #define MAX_HEAP_SIZE 16711600 /* 高速ヒープ・サイズ 16MB*/
0008.00 #define TERA_HEAP_SIZE 214748324 /* 高速ヒープ・サイズ 2GB */
0009.00 void main(void){
0010.00 char* buf;
0011.00 long heap_size;
0012.00
0013.00 printf("** TESTMLC : 最大ヒープ・サイズ **\n");
0014.00 getchar();
0015.00 heap_size = TERA_HEAP_SIZE;
0016.00 buf = (char*)malloc(heap_size);
0017.00 if(buf == NULL){
0018.00 printf("* buf %d cannot be assigned.\n", heap_size);
0019.00 }
0020.00 else{
0021.00 printf("* buf %d is OK!\n", heap_size);
0022.00 free(buf);
0023.00 }
0024.00 getchar();
0025.00 }
【解説】
通常のコンパイルでは
CRTBNDC PGM(MYLIB/TESTMLC) SRCFILE(MYSRCLIB/QCSRC) AUT(*ALL)
とするところを、テラスペース・パラメータを次のように指定するだけでよい。
CRTBNDC PGM(MYLIB/TESTMLC) SRCFILE(MYSRCLIB/QCSRC) AUT(*ALL) TERASPACE(*YES *TSIFC) STGMDL(*TERASPACE)
