2012-03-22 7 views
2

私は、Flashと非常にローエンドのCPUと少ないRAMを備えた組み込みシステムを持っています。 .MOファイルを使用したgettext言語の翻訳がどれだけ効率的かを知りたかったのです。gettextの効率:メモリ内変換

ロケール言語の文字列フェッチを行うには、gettextがMOファイルをフラッシュORから読み込むたびに、完全なMOバイナリファイルが最初にRAMにロードされ、そこからロケール文字列を取得しますか?

MOファイル(たくさんの文字列があるので、大きめ〜1Mb)が常にRAMに読み込まれると、RAMが枯渇します。

+0

あなたのシステムにはオペレーティングシステムがありますか?それはファイルシステムになっていますか?それは外部フラッシュを持っていますか?またはファイルシステムを搭載したメモリカード? – gbulmer

+0

オープンソースなので、いつでもそれを微調整できます。 – MSalters

+0

@gbulmer、はいLinuxとファイルシステム。 –

答えて

1

MSaltersはオープンソースだと言っているので、それを微調整することができます。

システムの完全な定義を(私のコメントごとに)与えると、より多くのことを助けることができます。

これは深く組み込まれたシステム(私がやることのようなもの)で、OSがなく、どんなタイプの外部ファイルシステムもない場合、文字列はすべてメモリ内になければなりません。これらの文字列をフラッシュに格納するメカニズムがあり、RAMを消費しない可能性が非常に高いでしょう。

たとえば、ARMでは、データ構造をフラッシュに簡単に格納できます。これを行うには、あなたのようなものを使用して、プログラムのセグメントは、それらを格納するようにコンパイラに指示する必要があります:

プログラムがリンクされている
const char mesg1[] __attribute__((section (".USER_FLASH"))) 
      = "Ciao a tutti"; 
const char mesg2[] __attribute__((section (".USER_FLASH"))) 
      = "Riesco a sentire la mia mente va Dave"; 

、リンカスクリプトがフラッシュに文字列を配置するために書き込む必要があります、それらはRAMにコピーされません。

メッセージにどれくらいのスペースを割けることができますか?彼らはどれくらいのスペースを取るのですか?

よく研究された問題と戦っているかもしれません。リソースの限界に近づくにつれてプログラミングの労力が指数関数的に増加します。最終的な数%の記憶に物を適合させるためには多大な努力が必要です。

「明白な」微調整は、簡単な圧縮技術を試してみることです。 1つは生のメッセージに適用され、メッセージが印刷されると非圧縮になります。

編集:私はあなたの質問が非常に単純で自然であるように思っていました。答えは簡単に見つけることができると思いました。

私はgettextのドキュメントを見ましたが、それを見つけることができませんでした。私はソースをダウンロードしました。 10分後、私は正直なところ、それがどう働いているか教えてくれませんでした。私はそれが多くの私は予想よりも複雑であることを伝えることができます。私は豊富なドキュメントを見ました。問題の原因となる可能性のあることについて、翻訳を行うための最良の構成方法、プログラムの準備方法、非常に有用な洞察力。しかし、ドキュメントで、その全体的な実行時アーキテクチャについて説明することができませんでした。なし。何もない。

GNU gettextメーリングリストに行き、必要に応じて検索してください。メーリングリストのアーカイブはhttp://savannah.gnu.org/projects/gettext/にあります。私はもっと役に立たないことをお詫びします。

+0

ありがとうございました、私はあなたの答えから手作業で対処する方法の手掛かりを得ました。また、MOファイルがどのように処理されるかを知るためにgettextのソースコードを調べます(RAMにロードされていると思います)。 –

+0

あなたがそれに取り組んでいて、進歩している限り、人々はおそらく助けようとします。がんばろう。 – gbulmer

+0

ああ、私はここにリンクがあるhttp://stackoverflow.com/questions/3437105/why-doesnt-gettext-have-a-db-storage-option that tells: "また、コンパイルされたgettextファイル(.mo)はメモリに読み込まれるように最適化されているため、通常のテキストファイル(コンパイルされていない.poファイルなど)よりも適切です。 –

関連する問題