私は、メッセージ用にカスタムのバイナリプロトコルとバイナリ仕様を持っています。バイナリプロトコルは、各メッセージにいくつかのヘッダーを追加します。メッセージは比較的大きく、約50種類のフィールドがあります。私の必要条件は、Linux 2.6.x上のgccコンパイラを使って、cまたはC++のバイナリメッセージから2つのフィールドだけを解析することです。Cでのバイナリデータの解析
開発者は、ヘッダーを表すクラスとメッセージを表す別のC++クラスを作成しました。メッセージを受信すると、彼はバイトペイロードのstatic_castを使用してメッセージクラスを取得します。メッセージ・オブジェクト・クラスを取得すると、単にpointerToMessage.getFieldName()を使用してデータを取得します。
上記の段落を修正しました。開発者はメッセージのクラスではなく構造体を作成しました。構造体はgccの__attribute __((__ packed__))を使用します。
私の質問は、static_castを使用すると、メッセージ全体が解析されるかどうかです。または、ポインティングはアクセス時間に発生します(たとえば、pointerToStruct.fieldName)。 また、2つの操作をタイムアウトし、static_castを実行する時間が実質的にないことを発見しました。ここでは、pointerToStruct.fieldNameを介してフィールドにアクセスするのに約120mircosecondsがかかります。なぜフィールドへのアクセスに時間がかかるのですか?
なぜstatic_castが解析を実行するのですか? – Pubby
私はC++の開発者ではなく、コード化された人は利用できないため、お詫び申し上げます。したがって、上記の質問。それで、アクセス時に解析が行われるのは本当ですか? – Jimm
@ Jimm:あなたが今までに説明したことは、まったく解析することはありません。 – ildjarn