2005-07-25
動的メモリ管理のためのランタイムというのは、早い話がnewおよびdelete演算子とその関連部分のことです。new演算子はmallocを使って実装されることが多いため、newを使うためにはmallocやfreeといった外部ライブラリも必要になります。
mallocやfreeといった、動的なメモリ割付け・解放を行うために直接必要な機能の他に、割付けに失敗した場合に必要になる例外処理やハンドラに関するランタイムも同時に必要になります。newおよびdeleteはC++の基本機能ですが、それだけでプログラムサイズはかなり膨らみます。
さらには、mallocを使うにせよ、他の方法を使うにせよ、マルチタスク環境では排他制御のための何らかの機能が必要になります。単純に割り込みを禁止するだけであればランタイムまでは不要でしょうが、応答性能を向上させるにはセマフォ等の機能が必要になる場合もあります。
メモリの割付けに失敗した場合には、std::set_new_handlerで登録されたハンドラを呼び出すか、std::bad_alloc例外を送出することになります。std::bad_allocクラスは単純なクラスですが、仮想関数を持つために、仮想関数テーブルなどをリンクする必要が発生します。
例外発生を抑止するためにstd::nothrowを使用する場合でも、必要なランタイムはあまり変わりません。それどころか、std::nothrowのインスタンスが必要になってきます。std::nothrowはnewの内部で例外を封じ込めるためのものであって、例外処理を使わないという意味ではないからです。
Trackback
http://cppemb.blog17.fc2.com/tb.php/4-0b90c94e
<< old : Next door : New >>
C++と組み込み環境 | Page Top▲
Comment