inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

포인터 vs 배열

질문입니다!

340

Windfall

작성한 질문수 57

0

const char* test1 = "Hello World";

Hello World가 메모리 어딘가에 생성되고

test1은 그저 Hello World가 어디있는지만 알려줌

포인터이기 때문에 4바이트 or 8바이트

char test2[] = "Hello World";

Hello World가 메모리 어딘가에 일단 생성됨

Hello World가 있는곳을 찾아서 4바이트씩 끊어서 계속

test2 배열에 넣어줌

그래서 문자열의 크기가 커지면 크기가같이 커짐

char test3[] = { 'h','e','l','l','o' }; 는

hello가 메모리 어딘가에 생성되는게아니 그냥 하나식 test3 배열에 옮겨짐

이게 맞나요?

그리고 Hello World가 임시적으로 어딘가에 생성되던데

왜 그렇게 되는건가요 test3케이스처럼 문자열도 그냥 하나씩 다 넣어버리는게 안되는건가요?

C++

답변 5

1

Rookiss

네 거의 맞습니다.

char test2[]의 Hello World 는 둘다 .data영역에 생성

이 부분은 컴파일러에 따라 다를 수 있습니다.
그냥 test2에 h e l l~ 이렇게 하나 하나 채우는
어셈 코드로 만들어질 수도 있습니다.

0

Windfall

늦은시간까지 감사합니다!

1

Rookiss

const char* test1 = "Hello World";
Hello World가 메모리 어딘가에 생성되고
test1은 그저 Hello World가 어디있는지만 알려줌
포인터이기 때문에 4바이트 or 8바이트

-> 그 메모리 '어딘가' = 데이터 영역입니다.

char test2[] = "Hello World";
Hello World가 메모리 어딘가에 일단 생성됨

-> 이번엔 메모리 '어딘가' = 스택입니다.

Hello World가 있는곳을 찾아서 4바이트씩 끊어서 계속
test2 배열에 넣어줌 그래서 문자열의 크기가 커지면 크기가같이 커짐

-> 아닙니다. 4바이트가 아니라 char은 1바이트 이기 때문에
'H' 'e' 'l' ... 등을 각각 복사해주고 각 1바이트입니다.
사실상 test3 케이스와 유사하게 동작합니다.

char test3[] = { 'h','e','l','l','o' }; 는
hello가 메모리 어딘가에 생성되는게라 그냥 하나식 test3 배열에 옮겨짐

-> 네 어셈블리를 까보면 스택에 'h' 'e' .. 한 글짜씩 복사됩니다.

그리고 의문이 생길 땐 어셈블리로 까보는걸 추천 드립니다.
그래야 공부도 되고 오래 남습니다.

0

Windfall

그러면 const char* test1 의 Hello World와

char test2[]의 Hello World 는 둘다 .data영역에 생성

data영역에는 전역변수, 정적변수가 들어간다고 알고있는데

문자열이 const char라서 전역, 정적변수가 아님에도 불구하고 그냥 rodata로 들어가서 data영역 안에 생성되는건가요?

그리고 const char*형 test1과 char배열형 test2자체는 스택에있다

제가 이해한게 맞나요?? 

0

Rookiss

char test2[] = "Hello World"

아 좀 오해하기 쉽게 답변 드린 것 같은데
"Hello World" 문자열 자체가 스택에 생성된다는 의미는 아니고,

test2 배열이 스택에 있고, H e l l o~ 문자가 해당 배열에 하나씩 복사가 됩니다.

0

Windfall

const* int test1 = "Hello World"

-> Hello World가 data영역에 생성

char test2[] = "Hello World"

-> Hello World가 스택에 생성

왜 이런 차이가 나는지 잘 모르겠습니다...

그냥 변수자체 포인터 변수 test1, test2는 스택에 들어간다는건알겠는데 왜 

오른쪽에 있는 Hello World는 생성 영역에 차이가 있는지 잘 모르겠습니다.. ㅠㅠㅠㅠ

어셈블리는 계속해서 보고있습니닷!

visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.

0

541

1

정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?

0

442

1

strcpy() 구현 관련 질문

0

513

1

빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?

0

452

1

클래스 타입의 포인터 질문합니다

0

546

1

입력값을 enum 값에 넣어주는거 이제 막혔나요?

0

497

1

템플릿 특수화 관련 질문

0

384

1

포인터 관련 질문합니다!

0

263

1

Unable to start assembler. Check your settings.

0

830

2

cpu선택

0

539

1

포인터 질문이 있습니다

0

323

1

20:35 에서 구조체 크기에 대한 질문입니다!

0

584

1

iterator 삭제관련

0

406

1

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

0

310

1

15 분 45초 대 질문

0

308

0

스택 프레임 질문합니다!

2

306

1

오른값 참조 in 게임

0

384

0

동적할당 질문이 있습니다

0

449

1

안녕하세요 메모리에 대해 질문드립니다.

0

304

1

함수객체 의 매개변수

0

358

1

복사생성자

0

434

1

main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요

0

420

1

포인터 실습 강의를 보고 궁금한게 있습니다.

0

354

1

스택 오버플로우

2

790

1