在C++程序中,常量數據存儲在哪裏,特別是字符串常量?存儲在內存中的字符串常量在哪裏?
我問,因爲在以下問題:
Why can creating a static const std::string cause an exception?
由達蒙答案,在末端執行以下操作:
一個string_view意志,違背了一個字符串,而不是分配非常量內存,將常量數據複製到該內存中,然後假裝它是不變的。相反,它將直接管理一個指向常量數據的指針,而這就是全部。
這樣,你的常量是真正的(不只是正式)常量,有 沒有分配,沒有例外的可能性,沒有雙重記憶 用法。大多數情況下,它仍然看起來像一串字符串。 唯一值得注意的區別是,一個string_view不 保證nul終止(但它指向 的字符常量沒有,所以這是無關緊要的),並且它真的是不變的事實, 不可修改......這是正是你想要的。
甚至不需要將常量存儲在內存中的某些地方?如果它們存儲在內存中(因爲內存是有限的),是不是可能會拋出一個異常,因爲沒有更多的內存?
它們的內存在任何代碼運行之前加載。所以沒有運行時異常是可能的。如果你可以運行,那麼內存已經在那裏。 –
相關http://stackoverflow.com/questions/349025/is-a-string-literal-in-c-created-in-static-memory也https://isocpp.org/wiki/faq/ctors#static-初始化階 –