C ++でメモリが制限された組み込みシステム(Tegra 2)用のアプリケーションを開発しています。私は時々発生するコードのNULL結果を処理していますが、アプリケーションはこれを処理できますnew
。new[]
問題は、メモリが完全になくなると、システムがSIGKILLによってプロセスを強制終了することです。new
プロセスを強制終了するのではなく、NULLを返すだけでよいとどういうわけか言うことができますか?
C ++でメモリが制限された組み込みシステム(Tegra 2)用のアプリケーションを開発しています。私は時々発生するコードのNULL結果を処理していますが、アプリケーションはこれを処理できますnew
。new[]
問題は、メモリが完全になくなると、システムがSIGKILLによってプロセスを強制終了することです。new
プロセスを強制終了するのではなく、NULLを返すだけでよいとどういうわけか言うことができますか?
使用しているOSの種類はわかりませんが、 Linuxのように日和見的なメモリ割り当てをサポートしているかどうかを確認する必要があります。
有効にすると、次のことが発生する可能性があります(詳細/ソリューションはLinuxカーネルに固有です)。
new
。十分なメモリがなくても、なぜなら...malloc
解決策:メモリのオーバーコミットを無効にします。
echo 2 > /proc/sys/vm/overcommit_memory
2つのアイデアが思い浮かびます。
直接依存するのではなく、独自のメモリ割り当て関数を作成しますnew
。組み込みシステムを使用しているとのことですが、アプリケーションでは特別なアロケータが非常に一般的です。アプリケーションをハードウェア上で直接実行していますか、それともエグゼクティブ/ OSレイヤーの下のプロセスで実行していますか?後者の場合、メモリを割り当てるためのシステムAPIが提供されていますか?
C ++をチェックしてset_new_handler
、それが役立つかどうかを確認してください。new
割り当てが失敗したときに特別な関数が呼び出されるように要求できます。おそらくその関数では、プロセスを強制終了しているものが実行されるのを防ぐためのアクションを実行できます。参照:http ://www.cplusplus.com/reference/std/new/set_new_handler/