メモリ

前回、Jpeglibの動作がおかしいような事を書いたがよく調べてみるとおかしいのはメモリ確保だった。
メモリ確保無し+メモリ書き込み無しで動かしたら割りと動いているっぽい。


試しに、このプログラムを動かすと

int max = 384;
char* ptr[384];
for(i=0; i<384; i++) ptr[i] = NULL;
for(i=0; i<max; i++)  
{
	ptr[i] = (char*) malloc(65536);
	pspDebugScreenPrintf("%X %X\n",ptr[i],ptr[i]+0xffff);
	if(ptr[i] == NULL) break;
	memset(ptr[i], 0, 65536 );
	sceKernelDelayThread(100000);
}
for(i=0; i<384; i++)
	if(ptr[i] != NULL)
		free(ptr[i]);

pspDebugScreenSetXY(0,4);
pspDebugScreenPrintf("Test end %d",max);
	
sceKernelDelayThread(9000000);
sceKernelExitGame();
return 0;

9B4E640ぐらいの所でフリーズしてしまう。
PSPINSIDEで確認するとVSH系のモジュールがあって、上書きしてしまっているっぽい。
FW1.0や1.5ではどうなんだろう?。
eLoaderのせいなのか?。でもeLoaderは何もやっていないような気がする。(何もやって無いのが悪いのかもしれないけど)
PSPSDKのmallocも怪しい感じがする。

そもそもsceKernelAllocPartitionMemoryでメモリ確保してもsceKernelMaxFreeMemSizeが減らないのが気になる。