[SCore-users-jp] set_new_handler について(再送)
Hisaki Honjo
honjo @ murata.co.jp
2006年 1月 11日 (水) 10:53:56 JST
本庄です。
いつもお世話になっております。
SCoreについて不明な現象があるため投稿させていただきました。
内容は、set_new_handlerを使用した場合の挙動についてです。
通常のg++(2.96)ですと、set_new_handlerが有効に働き、
メモリアロケーション(new)が失敗すると
セットしたコールバック関数が呼び出されます。
ところが、mpic++で同一のソースをコンパイルすると
コールバック関数が呼び出されず、Killされてしまいます。
これは仕様なのでしょうか?
また、回避する方法はありますでしょうか?
[ソース]
-----------------------
#include <stdio.h>
#include <stdlib.h>
#include <new.h>
void MyHandler(void)
{
fprintf( stderr, "Memory allocation error\n" );
exit( -1 );
}
/*****************************************
Main
*****************************************/
int main(int argc, char ** argv)
{
const int nCol = 25000;
const int nRow = 10000;
int i;
int j;
set_new_handler( MyHandler );
double ** pTable = new double*[ nCol ];
for ( i=0; i<nCol; i++ )
{
pTable[i] = new double[ nRow ];
for ( j=0; j<nRow; j++ )
{
pTable[i][j] = 0.0;
}
}
for ( i=0; i<nCol; i++ ) delete [] pTable[i];
delete [] pTable;
return 0;
}
-----------------------
[結果 g++編]
% g++ -O3 -o sample_gpp sample.cpp
% ./sample_gpp
Memory allocation error
[結果 mpic++編]
% mpic++ -O3 -o sample_mpicpp sample.cpp
% ./sample_mpicpp
Killed
[環境]
OS : RedHat Linux 7.3 (カーネル2.4.28)
Memory : 1GB
SCore : 5.8.0
以上よろしくお願いいたします。
------------------------
本庄 央樹(Honjo Hisaki)
------------------------
SCore-users-jp メーリングリストの案内