[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 メーリングリストの案内