Страницы

Поиск по вопросам

понедельник, 29 апреля 2019 г.

Поддержка уникальности строк в QStringLiteral

Из справки известно, что QStringLiteral размещает текст непосредственно в исполняемом файле в области только для чтения. Однако я не нашёл информации о том, что в случае использования одинаковых строк в разных местах кода проекта, эти строки будут храниться по уникальности значения. Или каждый экземпляр строки будет сохранён отдельно?
Допустим, имеется сетевой запрос к некоему внешнему ресурсу. Этот запрос имеет строковую команду, скажем, "https://ru.stackoverflow.com/". Также есть два класса: class A и class B. В обоих требуется выполнять указанный запрос:
class A { void getSo() { sendRequest(QStringLiteral("https://ru.stackoverflow.com/")); // Далее выполняем что-то специфическое для класса A. } };
class B { void getSo() { sendRequest(QStringLiteral("https://ru.stackoverflow.com/")); // Далее выполняем что-то специфическое для класса B. } };
Вопрос заключается в том, что именно попадёт в исполняемый файл: две строки с адресом запроса или одна? Или я неверно понимаю принцип работы указанного макроса?


Ответ

Стандартом не оговорено. Зависит от компилятора и настроек. Например, в Visual C++ 2015 имеется опция (зависящая от использованных параметров оптимизации)
/GF включить объединение строк только для чтения
Так что эти литералы будут объединены. Но если скомпилировать без этого ключа или с с /GF-, то в exe'шнике каждая займет свое место (при отключенной оптимизации - включение оптимизации автоматически включает эту опцию).

Комментариев нет:

Отправить комментарий