次の C++ クラスを検討してください。
class MyClass
{
TypeA a;
TypeB b;
TypeC c;
};
私が使用するコンパイラは、メモリ内のメンバーの順序がクラス定義で使用した順序と同じになるように、このクラスの表現を作成します。私は最近、この事実を悪用してメンバーを初期化するプログラムに遭遇しました。レイアウトはコンパイラに依存するため、これが非常に悪い考えであることはわかっていますが、コードを書いていないので、これまでのところうまくいきました。
ASLR
現代のオペレーティングシステムの機能がこれを台無しにするのではないかと思っていました。オブジェクトが で動的にインスタンス化されている場合、これは当てはまらないと確信していますheap
。しかし、他の場合はどうでしょうか。