В программе на C++, где хранятся постоянные данные, особенно строковые константы?Где хранятся строковые константы в памяти?
Я спрашиваю, потому что в следующий вопрос:
Why can creating a static const std::string cause an exception?
ответ, Дэймон, имеет следующую строку в конце:
string_view будет, в отличие от строки нет, выделять непостоянную память , копировать в нее постоянные данные, а затем притворяться постоянными. Вместо этого он будет управлять указателем непосредственно к постоянным данным, а - вот и все.
Таким образом, ваши константы действительно (не только формально) постоянны, там не являются выделениями, нет возможности исключений и нет двойной памяти . И по большей части он все еще выглядит и пахнет струной. Единственные заметные отличия в том, что string_view не гарантирует nul-term (но постоянная символа, указывающая на , делает это, так что это не имеет значения), и тот факт, что он действительно постоянный, не поддается изменению ... который именно то, что вы хотите.
Dont даже константы необходимо хранить в памяти, где? И если они хранятся в памяти (поскольку память конечна), разве нельзя ли исключить исключение, потому что больше нет памяти?
Память для них загружается до запуска любого кода. Таким образом, исключение во время выполнения невозможно. Если вы можете запустить, то память уже есть. –
связан с http://stackoverflow.com/questions/349025/is-a-string-literal-in-c-created-in-static-memory также https://isocpp.org/wiki/faq/ctors#static- INIT заказ –