2

私は、OS を使用しない非常に特殊なプラットフォームで作業しています。当面のタスクでは、実行時にアクセスするために、文字列やビットマップなどのリソースをすべてコード バイナリとは別に生のバイナリ データに格納する必要があります。

ストレージブロックの直接読み取りおよび書き込みメカニズムの実装はありますが、ファイルシステムはありません。言語はほとんどの場合、プラットフォーム コンパイラの制限であるテンプレートと例外のない C++ であるため、stl と boost はありません。

これらの制限を考えると、前述のリソースをディスクに保存し、何らかのキーを使用してそれらにアクセスするための単純なデータベース ストレージ アプローチが必要です。私は当分の間、単純なフラット バイナリ ストレージを使用し、数値 ID (リソースの生バイトのオフセットを取得するためのテーブル インデックス) でアドレス指定できる独自のものを作成しました。ただし、リソース ID を手動で追跡し、それらが 0 から順番に割り当てられていることを確認する必要があるため、これを使用するのは非常に不便です。

要件に合わせて比較的簡単に変更でき、短い文字列をキーとして使用できるようにハッシュ関数の展開を開始する前にコードベースと統合できる、より優れたライブラリ ソリューションが既に存在するのではないかと考えています。ストレージは一度生成されると一定であり、読み取りのためにのみアクセスされます。

編集:私が必要としているのは、ランタイムリンカーとファイルシステムなしで機能する(または簡単に機能する)リソースdllの代替品だと思います。

4

3 に答える 3

2

SQLiteの使用を検討しましたか?私はそれが小さなローカライズされたデータベースとしてうまく機能することを発見しました、そしてそれは「インスタンス」または絶えず実行されているプロセスを必要とせず、ただファイルです。C++に非常に簡単に統合できます。

http://www.sqlite.org/

于 2012-05-14T16:15:14.027 に答える
2

カスタムOS、特定のデータ、および制約されたリソースの制約が与えられます。私はあなたの唯一の選択肢はあなた自身のロールだと思います。

迅速で汚い:http ://elliottback.com/wp/hashmap-implementation-in-c/

フォローアップ編集:XMLまたは他のデータソースから「ハッシュマップ」への変換には、ツールフェーズで同じコードを使用します。使用中に発見された違いは、記録、アップロード、収集、およびビルドへのフィードバックが可能です。

これは「一般的な」問題かもしれませんが、組み込み開発でよく発生します。あなたが望むものがあなたが持っているものと衝突するポイントがあり、健全性チェックが必要です。通常、保守的な「単純な」ソリューションがより良いスタートであり、すでにそれを持っているようです。

于 2012-05-15T12:49:32.160 に答える
0

以前にこの問題に数回取り組んだことがありますが、私は「自分でロールする」という答えに同意します。詳細(プラットフォーム、IDE、アプリケーションなど)を知らなくても、参照ポイントしか提供できません。

私たちの戦略は、画面レイアウト、サウンド、ビットマップ、およびフォントテーブルを含むバイナリパッケージを構築しました。各パッケージには、パッケージに格納されているリソースの数とタイプを識別するヘッダーと、各リソースの先頭を指すオフセットが含まれていました。(パッケージメタデータの構造は、IFDブロックなどを含むJPEG / TIFFヘッダーに大まかに触発されました)。いくつかの実装では、NANDフラッシュからロードしていたため、16ビットCRCを各リソースに関連付けました。他の実装では、zlibを使用して圧縮されたリソースを識別するために「圧縮」フラグが追加されました。

ワークフローの観点から:私たちのIDEはPythonインタープリターを提供しました。これにより、リソースパッケージの構築を自動化するスクリプトを実装できました。これにより、結果のパッケージをバイナリイメージを構成するhexファイルに直接埋め込むこともできました。

于 2012-05-17T13:44:02.067 に答える