#cpp #qt #qt5
Из справки известно, что 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. } }; Вопрос заключается в том, что именно попадёт в исполняемый файл: две строки с адресом запроса или одна? Или я неверно понимаю принцип работы указанного макроса?
Ответы
Ответ 1
Стандартом не оговорено. Зависит от компилятора и настроек. Например, в Visual C++ 2015 имеется опция (зависящая от использованных параметров оптимизации) /GF включить объединение строк только для чтения Так что эти литералы будут объединены. Но если скомпилировать без этого ключа или с с /GF-, то в exe'шнике каждая займет свое место (при отключенной оптимизации - включение оптимизации автоматически включает эту опцию).
Комментариев нет:
Отправить комментарий