일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- RVO
- C
- 2294
- UnrealEngine5
- C++
- Frustum
- 백준
- RootMotion
- GeeksForGeeks
- 티스토리챌린지
- algorithm
- IFileDialog
- softeer
- 줄 세우기
- DirectX11
- winapi
- DeferredRendering
- directx
- 오블완
- NRVO
- Unreal Engine5
- baekjoon
- 프로그래머스
- 언리얼엔진5
- 1563
- UnrealEngine4
- 팰린드롬 만들기
- UE5
- const
- Programmers
- Today
- Total
목록C (3)
Game Develop
Text 세그먼트(혹은 Code 세그먼트)는 일반적으로 변하지 않는 영역이고, 변하지 않아야하는 영역이다. 그래서 ReadOnly 영역이며, 그렇기 때문에 리터럴값들이 여기에 저장될 수도 있는듯 하다. 위 이미지에선 리터럴값이 rodata(.rdata)에 저장되어진다고 나와있는데, 숱한 구글링을 통해 지식들을 취합해본 결과, 컴파일러에 따라 rodata 세그먼트일 수도 있고, Text세그먼트일 수도 있다고 한다. Data 세그먼트(.data)는 보통 초기화된 전역변수나 정적변수가 들어있다고 한다. 거기서 좀 더 쪼개자면, '초기화된 읽기전용 영역'과 '초기화된 읽기-쓰기 영역'으로 나눌 수 있다. 아래 두 변수가 전역이라는 가정하에 // 전역변수 const char* cp = "maxlevel"; // ..
const char* cc = "maxlevel"; 위의 코드에서 "maxlevel"은 DataSegment의 rodata 영역에 저장된다. 아마 read only의 줄임말로 ro라 한것같다. 다만, 저런 리터럴값들이 DataSegment에 저장할 수도 있고, TEXT Segment (CodeSegment)에 저장될 수도 있다고 한다. 컴파일러마다 차이가 있다고 하니, 명심하자. 구글링하면 어떤 글은 Data Segment에 저장된다고 하고 어떤 글은 Text Segment에 저장된다고 나와있기 때문에 헷갈릴 수 있다. 일단 Data Segment라고 가정하겠다. 어쨌든 문자열리터럴은 readOnly영역에 있기 때문에, cc[0] = 's' 이런식으로 값수정은 불가능하다. 그래서 char*에 문자열을 담..
알다시피 문자열의 끝은 반드시 \0이 있어야한다. 그렇기 때문에 어떠한 문자열을 저장하는 char 배열을 선언할 경우, 반드시 문자의 개수보다 1개 더 크게 잡아야한다. maxlevel 은 8글자이지만, 배열의 크기는 최소 9로 잡아줘야한다. char cArray[9] = "maxlevel"; 문자개수와 똑같은 크기인 8로 선언할 경우, 컴파일에러가 발생한다. 컴파일시점에서 반드시 문자열의 끝에는 \n이 있어야한다고 보장해줘야한다는 의미이다. 만약, maxlevel이라는 문자열의 앞 3글자 max를 low로 바꿔서 최종적으로 lowlevel이라는 문자열을 만드는게 목적이라면, 아래와 같이해야한다. char a1[9] = "maxlevel"; char a2[] = "low"; memcpy(a1, a2, s..