작성
·
185
1
루키스님 좋은강의 잘 듣고있습니다!
다름이 아니라
강의를 듣다가 메모리에 데이터가 저장된 부분을 보니
데이터가 연속적으로 저장되지않고
16바이트 정도 띄워져서 저장이 된걸보고 구글링을하다
64비트 환경이여서 메모리 정렬때문에 8바이트 단위로 저장이 된거구나 라고 생각했는데 이 이유가 맞나요??
또,막상 이렇게 확인해보니
cccccccc 0113f8a0
0000001 ccccccccc
이런식으로 저장된걸 보니 왜
cccccccc 0113f8a0
ccccccccc 0000001 이 아니지라는 의문이 생기더라구요
이유를 알고싶으면 운영체제를 공부해야하나요?
아니면 컴퓨터 구조쪽을 공부해야하나요???
무엇을 공부해야 알 수 있을지 궁금해요 ㅜㅜ
답변 2
2
여기서 데이터는 스택 메모리를 의미하시는거 같은데,
스택은 일종의 큰 도화지를 할당받고, 원하는 영역을 사용하는 개념이라
꼭 연속해서 사용할 필요가 없고
연속해서 사용한다고 딱히 성능 향상이 있는 것도 아닙니다.
다만 기본적으로 8바이트 변수는 8바이트 정렬,
4바이트 변수는 4바이트 정렬(etc..)을 해야 CPU에서 빠르게 처리 될 수 있기에
어느 정도 정렬이 된 상태로 저장이 되긴 합니다.
그리고 현재 보면 0xcccccccc와 비슷한 값들이 많이 있는걸 볼 수 있는데,
이건 디버그 모드에서 Visual Studio가 넣어주는 일종의 트랩입니다.
혹시라도 코드 작업을 할 때 버퍼 오버플로우나 메모리 오염 등으로
0xcccccccc 영역이 훼손되어 다른 값으로 들어간다면,
깨알같이 메모리 훼손으로 인식해서 크래시를 내버리는 원리죠.
해킹 분야에선 이런 기법을 canary라고 부르는데요.
카나리아 새는 유독가스에 매우 민감한 새입니다.
탄광 같은 지하에서 카나리아 새를 데리고 다니고,
이 새가 죽으면 유독 가스 유출이 있는걸로 간주해서 다들 대피를 했다고 합니다.
1
뒷부분 강의 마저 들으니 이 부분 설명이 나왔네요! 왜 cccccc가 저렇게 끼워져서 들어갔는지 이해했어요!
이런 디테일한 요소 강의 중간중간 설명해주셔서 감사합니다! :)