inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

포인터 연산

메모리 저장

282

안혜령

작성한 질문수 4

1

루키스님 좋은강의 잘 듣고있습니다!

다름이 아니라 

강의를 듣다가 메모리에 데이터가 저장된 부분을 보니

데이터가 연속적으로 저장되지않고

16바이트 정도 띄워져서 저장이 된걸보고 구글링을하다

64비트 환경이여서 메모리 정렬때문에 8바이트 단위로 저장이 된거구나 라고 생각했는데 이 이유가 맞나요??

또,막상 이렇게 확인해보니

cccccccc 0113f8a0

0000001 ccccccccc

이런식으로 저장된걸 보니  왜

cccccccc 0113f8a0

ccccccccc 0000001  이 아니지라는 의문이 생기더라구요

 

이유를 알고싶으면 운영체제를 공부해야하나요?

아니면 컴퓨터 구조쪽을 공부해야하나요???

무엇을 공부해야 알 수 있을지 궁금해요 ㅜㅜ

 

C++

답변 2

2

Rookiss

여기서 데이터는 스택 메모리를 의미하시는거 같은데,
스택은 일종의 큰 도화지를 할당받고, 원하는 영역을 사용하는 개념이라
꼭 연속해서 사용할 필요가 없고 
연속해서 사용한다고 딱히 성능 향상이 있는 것도 아닙니다.
다만 기본적으로 8바이트 변수는 8바이트 정렬,
4바이트 변수는 4바이트 정렬(etc..)을 해야 CPU에서 빠르게 처리 될 수 있기에
어느 정도 정렬이 된 상태로 저장이 되긴 합니다.

그리고 현재 보면 0xcccccccc와 비슷한 값들이 많이 있는걸 볼 수 있는데,
이건 디버그 모드에서 Visual Studio가 넣어주는 일종의 트랩입니다.
혹시라도 코드 작업을 할 때 버퍼 오버플로우나 메모리 오염 등으로
0xcccccccc 영역이 훼손되어 다른 값으로 들어간다면,
깨알같이 메모리 훼손으로 인식해서 크래시를 내버리는 원리죠.

해킹 분야에선 이런 기법을 canary라고 부르는데요.
카나리아 새는 유독가스에 매우 민감한 새입니다.
탄광 같은 지하에서 카나리아 새를 데리고 다니고,
이 새가 죽으면 유독 가스 유출이 있는걸로 간주해서 다들 대피를 했다고 합니다.

 

1

안혜령

뒷부분 강의 마저 들으니 이 부분 설명이 나왔네요! 왜 cccccc가 저렇게 끼워져서 들어갔는지 이해했어요!

이런 디테일한 요소 강의 중간중간 설명해주셔서 감사합니다! :)

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

0

541

1

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

0

441

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

829

2

cpu선택

0

539

1

포인터 질문이 있습니다

0

322

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

419

1

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

0

353

1

스택 오버플로우

2

790

1