オブジェクトのさまざまなバージョン、それらのサイズ、および割り当てについて質問があります。プラットフォームはSolaris8(およびそれ以降)です。
すべて共有ライブラリDにリンクするプログラムA、B、およびCがあるとします。あるクラスがライブラリDで定義されているので、それを「classD」と呼び、サイズを100バイトと仮定します。ここで、既存のバイナリBまたはCに影響を与えずに、プログラムAの次のバージョンのclassDにいくつかのメンバーを追加します。新しいサイズは、たとえば120バイトになります。プログラムAでclassDの新しい定義(120バイト)を使用し、プログラムBとCで引き続きclassDの古い定義(100バイト)を使用する必要があります。A、B、およびCはすべて、演算子「new」を使用してDのインスタンスを作成します。
問題は、オペレーターが「新規」に割り当てるメモリの量をいつ知るのかということです。コンパイル時または実行時?私が恐れていることの1つは、プログラムBとCはclassDが100バイトであることを期待しているのに対し、新しい共有ライブラリDはclassDに120バイトを必要とし、この不整合により、プログラムBとCを新しいライブラリD。言い換えると、新しいclassDが必要とする余分な20バイトの領域は、プログラムBおよびCによって他の変数に割り当てられる可能性があります。この仮定は正しいですか?
ご協力いただきありがとうございます。