Страницы

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

воскресенье, 16 февраля 2020 г.

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

#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'шнике каждая займет свое место (при отключенной оптимизации - включение оптимизации автоматически включает эту опцию).

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

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