코드 영역에 저장되는건지 데이터 영역에 저장되는건지 말들이 다 다르다.
찾아봅시다..
VS 2017 이상에서는 리터럴을 char* 가 가리킬 수 없습니다. 반드시 const char* 가 가리켜야 하며, 덕분에 리터럴을 수정하는 괴랄한 짓을 컴파일 단에서 막을 수 있습니다.
아래 소스 코드는 VS2015로 한거다.
코드 영역인지 확인해보자
마우스를 가져다 대보면 const char[7]로 되어있다. 문자열 상수라고 볼 수 있다.
어셈블리어를 한번 살펴보자
"abcdef"의 주소가 0468BDCh인가 봅니다. 한번 찾아가봅시다.
어디 영역인거지..??
여러 글들이나 문서들을 거르고 걸러서 분석하고 연구해본 결과
read only part of data segment 즉 rodata에 저장된다는 말이다.
----------------------------- 찾아본 곳들 -------------------------------
en.wikipedia.org/wiki/Data_segment
-------------------------
www.geeksforgeeks.org/storage-for-strings-in-c/
-------------------------
softwareengineering.stackexchange.com/questions/294748/why-are-c-string-literals-read-only/294750
ssinyoung.tistory.com/m/15?category=810263
melkia.dev/ko/questions/164194?page=3
stackoverflow.com/questions/2245664/what-is-the-type-of-string-literals-in-c-and-c
perfectacle.github.io/2017/02/09/C-ref-004/
ko.wikipedia.org/wiki/%EB%8F%99%EC%A0%81_%EB%A9%94%EB%AA%A8%EB%A6%AC_%ED%95%A0%EB%8B%B9
'언어 > C++' 카테고리의 다른 글
C++ const(상수)로 선언된 변수를 수정할 수 있을까? (0) | 2021.01.18 |
---|---|
C++ 매크로에서 사용하는 #연산자나 ##연산자 (0) | 2021.01.16 |
C++ else if문은 최대 몇개까지 될까? (0) | 2021.01.14 |
C++ 구조체 만들때 메모리 아끼는 법. (0) | 2021.01.13 |
C++ 두 변수를 바꾸기 위한 여러가지 방법. (임시 변수 이용, 수학적 사고 이용, xor 비트 연산자 이용) (0) | 2021.01.04 |