0

リクエストの受信者をアドレス空間に依存しない方法で表すことができる場合、リクエストのコマンド オブジェクトを別のプロセスに転送し、そこでリクエストを満たすことができます。

から: http://www.worldcat.org/isbn/9780201633610

c++でオブジェクトをアドレス空間に依存しない方法で表現するにはどうすればよいですか?

edit :コマンドオブジェクトを別のプロセスに転送し、要求を満たすことができるように、オブジェクトをC ++のアドレス空間に依存しない方法で表現するにはどうすればよいですか?

4

3 に答える 3

3

設計パターン: 再利用可能なオブジェクト指向ソフトウェアの要素の本は手元にありませんが、著者は、アルゴリズムがオブジェクトのアドレスの実際の値に依存してはならないことを意味していると思います。

したがって、あるキーでハッシュ テーブルを使用する場合、ハッシュにキーのアドレスを使用するのではなく、キーの内容に関連するハッシュを使用します。

プログラムの観察可能な動作がASLRに依存することは望ましくありません。

他のプロセスと通信するには、シリアル化の手法と形式 (例: JSON ) を使用する方が適切であり、その形式が実際のアドレスに依存することは望ましくありません (特に、ASLR のために変更されるべきではありません)。

これは、最も低いレベルでは、オブジェクトにアドレスやポインターが含まれていないという意味ではありません (ポインターは C++ ではどこにでもあるため)。これは単に、それらのアドレスの特定の数値を気にしないことを意味します。

于 2016-01-11T06:09:31.103 に答える
2

As for your question updates:

How can an object be represented in address space independent way in c++ so as to enable transfer of command objects to different process and be able to fulfil the request?

That's done using de-/serialization for communicating any command objects to another process and an appropriate IPC technology (simplest one for the transport is socket based communication IMHO).

There are no c++ standard idiomatic solutions for de-/serialization, but google protobuf or boost::serialization are of a good assistance.

于 2016-01-11T06:20:26.603 に答える
1

あなたが引用した段落はコマンドパターンからのものだと思います。

パターンの説明は、さまざまなサイトの Web でも見つけることができます。例: https://en.wikipedia.org/wiki/Command_pattern

コマンドに対応するデータがアドレス空間に依存しない方法で転送されるコマンド パターンの最も一般的な表現は次のとおりです。

  1. Web 経由の HTTP/FTP 要求。
  2. CORBA はネット経由で呼び出します。
  3. MS Windows での COM 呼び出し。

リモートマシンまたは別のプロセスでコマンドを実行できるテクノロジーは他にもたくさんあると思います。それらが機能できるのは、コマンドがアドレス空間に依存しない方法で表現され、ネットまたはプロセス境界を越えて送信されるからです。

c++でオブジェクトをアドレス空間に依存しない方法で表現するにはどうすればよいですか?

コマンドの送信者と受信者が、 、 、 、 、 、 、 、 、charintなどの基本的な型のデータ表現に同意できる場合、通常はそれらをビルディング ブロックとして使用して、より高いレベルのオブジェクトの送受信を有効にすることができます。longfloatdouble

于 2016-01-11T06:26:12.867 に答える