C++ 프로그램에서 상수 데이터가 저장되는 위치, 특히 문자열 상수는 어디입니까?문자열 상수는 메모리에 어디에 저장됩니까?
나는 다음과 같은 질문에 있기 때문에 요구하고있다 :
Why can creating a static const std::string cause an exception?
데이먼에 의해 대답을의 끝에 다음이 있습니다
string_view 것, 문자열에 반대하지 할당량이 일정하지 않은 메모리를 할당하고 상수 데이터를 복사 한 다음 일정하다고 가정합니다. 대신 상수 데이터에 직접 포인터를 관리하고 입니다.
그런 식으로, 당신의 상수는 (정식 적으로뿐만 아니라) 상수 일뿐입니다. 은 할당이없고, 예외가 없으며, 이중 메모리가 없습니다 사용법입니다. 그리고 대부분은 여전히 보이며 끈처럼 냄새가납니다. string_view가이 null 종료를 보장하지 않는다는 점이 주목할만한 차이점입니다 (그러나 문자 상수는 을 가리킴). 이는 실제로는 상수라는 사실입니다. 은 수정할 수 없습니다 ... 이는 정확히 당신이 원하는.
심지어 상수는 메모리에 저장해야합니까? 그리고 그들이 메모리에 저장되어 있다면 (메모리가 유한이기 때문에) 더 이상의 메모리가 없으므로 예외가 발생할 수 있습니까?
코드가 실행되기 전에 메모리가로드됩니다. 따라서 런타임 예외는 없습니다. 실행할 수 있으면 메모리가 이미 있습니다. –
관련 http://stackoverflow.com/questions/349025/is-a-string-literal-in-c-created-in-static-memory https://isocpp.org/wiki/faq/ctors#static- 초기화 명령 –