作業用としてメモリを割り振ることができる最大のサイズは
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)