Эффективность gettext: перевод в памяти - PullRequest
2 голосов
/ 22 марта 2012

У меня есть встроенная система с Flash и очень низким уровнем процессора и меньше оперативной памятиЯ хотел знать, насколько эффективен перевод языка gettext с использованием файла .MO.

Для выполнения выборки строки языка локали каждый раз, когда gettext считывает MO-файл из флэш-памяти ИЛИ, весь двоичный файл MO сначала загружается в ОЗУ, и оттуда происходит выборка строки локали?* Если файл MO (он будет большим ~ 1 МБ, поскольку в нем много строк) всегда загружается в ОЗУ, он израсходует мою оперативную память.

1 Ответ

1 голос
/ 22 марта 2012

Как сказал MSalters, это открытый исходный код, так что вы можете настроить его.

Если вы дадите более полное определение системы (согласно моему комментарию), мы могли бы помочь больше.

Если это глубоко встроенная система (такого рода вещи, которые я делаю), без ОС и без какой-либо внешней файловой системы, все строки должны находиться в памяти. Скорее всего, будет механизм для хранения этих строк во флэш-памяти, чтобы они не потребляли ОЗУ.

Например, в 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";

Когда программа связана, сценарий компоновщика должен быть написан для помещения строк во Flash, и они не будут скопированы в RAM.

Примерно сколько места вы можете посвятить сообщениям? Сколько места они занимают?

Возможно, вы боретесь с хорошо изученной проблемой; количество программных усилий увеличивается экспоненциально по мере приближения к пределам ресурсов. Это может потребовать огромных усилий, чтобы вписать материал в последние несколько% памяти.

Однажды «очевидный» трюк - попробовать несколько простых методов сжатия. Можно применять к необработанным сообщениям и распаковывать их при печати сообщений.

Редактировать: Я думал, что ваш вопрос казался настолько простым и естественным, что я предполагал, что ответ будет простым для поиска.

Я посмотрел документацию по gettext, но не смог найти ее там. Я скачал источник. Через 10 минут я, честно говоря, не смог рассказать вам, как это работает. Я могу сказать вам, что это намного сложнее, чем я ожидал. Я посмотрел на обширную документацию. Много документации о том, как лучше всего организовать перевод, о том, как подготовить программу, о том, что может вызвать проблемы. Очень полезные идеи. Тем не менее я не смог найти никакой документации, объясняющей ее общую архитектуру времени выполнения. Никто. Ничего такого.

Мой лучший совет - зайти в списки рассылки gettext GNU, поискать / посмотреть и при необходимости спросить. Архивы списков рассылки можно найти на http://savannah.gnu.org/projects/gettext/ Я прошу прощения, что не мог быть более полезным.

...