Какое влияние (если таковое имеется) оказывает переход Delphi 2009 на Unicode (/ UTF16) на размер исполняемого файла и объем памяти?

StackOverflow https://stackoverflow.com/questions/82454

  •  01-07-2019
  •  | 
  •  

Вопрос

Вот один из них из отдела "Ни один вопрос не слишком глуп".:

Ну, как говорит субъект:Есть ли какое-то влияние?Если да, то сколько?Будут ли все строковые литералы, которые у меня есть в моем коде и в моих ресурсах DFM, теперь занимать в два раза больше места внутри скомпилированных двоичных файлов?Как насчет использования памяти во время выполнения скомпилированных приложений?Будут ли все строковые переменные теперь занимать в два раза больше оперативной памяти?Стоит ли мне вообще беспокоиться?

Я помню, что о чем-то подобном меня спрашивали во время одной из ранних предрелизных веб-трансляций, но я не могу вспомнить ответ.И поскольку пробная версия длится всего 14 дней, я не собираюсь просто пробовать это сам, пока не будут обновлены необходимые мне сторонние библиотеки (предположительно, примерно через месяц).

Это было полезно?

Решение

D2009 использует UTF-16 для строкового типа по умолчанию, хотя вы можете создать переменные в формате UTF-8, если вам нужно.

Ян Гойвертс обсуждается компромисс между размером и скоростью в хорошем посте в блоге.

Строковые литералы в DFMS имеют формат UTF-8, по крайней мере, с D7.Следовательно, не будет увеличения размера из-за строк в DFMS с D2009.

Другие советы

Теперь я, наконец, получил в свои руки Delphi 2009, и после внесения необходимых корректировок мой проект теперь компилируется и работает просто отлично.:)

Чтобы быстро получить результаты, мне изначально пришлось закомментировать один немного более сложный модуль приложения, поэтому он еще не сопоставим на 100%, но уже кажется достаточно безопасным предсказать, что, несмотря на значительное количество строковых литералов в нашем исходном коде (избыточные сообщения журнала отладки), размер двоичного файла, скомпилированного с помощью Delphi 2009, вероятно, будет примерно таким же, как и раньше, если не меньше!

Интересно, действительно ли компилятор Delphi выполняет какое-либо сжатие двоичных файлов или, по крайней мере, его разделов ресурсов каким-либо образом?Я действительно ожидал бы, что изменение строковых литералов UTF-16 окажет большее влияние в этом конкретном приложении.Действительно ли литералы хранятся в виде (несжатого) UTF-16 внутри двоичного файла?

У меня еще не было времени исследовать различия в объеме памяти.

Редактировать: Не связанный напрямую с Unicode, но определенно связанный:Андреас Хаусладен недавно опубликовал интересную статью о (значительном) влиянии {$STRINGCHECKS} опция компилятора (КСТАТИ:включен по умолчанию) от размера скомпилированного исполняемого файла: http://andy.jgknet.de/blog/?p=487

Я ждал VCL в Юникоде слишком много лет, наконец-то мы его видим.Я не думаю, что большинству приложений нужно беспокоиться о проблемах с размером, поскольку в любом случае у них не так много строковых литералов или они хранят огромные объемы данных в памяти.

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

Если какой-то разработчик хочет создать крошечный exes, он может вручную оптимизировать с помощью AnsiString (если i18n не является проблемой).

Я не пользовался Delphi много лет, но это, вероятно, зависит от того, какую кодировку Unicode они используют.UTF8 будет точно таким же для обычного набора символов ASCII (он использует более одного байта, только когда вы переходите к экзотическим символам).UTF16 может быть немного раздутым.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top