C/400

102. 16MB のヒープ・サイズを簡単に拡張するには

作業用としてメモリを割り振ることができる最大のサイズは
16MB ( 16711600 バイト ) である、という制限があることは良く知られている。
つまり一時的にIFS のファイルを読んで格納できるサイズは 16MB までに限られるのである。
このことは結構、いろいろな業務に制約を与えてきた。
例えば、

  1. 印刷スプールをオープンして読み込むことができるのは 16MB まで。
  2. アップロードできるファイルは 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)