왜 메모리 학습을 하는가 하면 심심해서 golang을 공부하면서 pointer 파트를 보고 꽤 재밌다고 생각이 들었습니다. 그래서 바로 조금더 깊게 알고싶은 마음에 C언어 학습을 시작합니다.
...
학습중인 C언어 자료에는 셋업이 window + visual basic으로 알려주지만
저는 mac환경이라 vscode로 따라하는 중입니다.
managed 언어만 경험이 있어 메모리 개념이 부족해 학습하면서 기록을 남겨봅니다.
64bit 시스템이여서 16진수 16개까지 메모리 주소 사용이 가능
32bit 시스템이면은 IDE가 8bit로만 표현할 것으로 추측!
nInput의 메모리 주소 0x000000016fdff5cc
값 00
이 할당
0x000000016fdff5c0 + 0c
의 값
숫자 5입력
Input number: 5
0c
주소에 05
값 입력 완료
메모리 주소 단위가 1Byte여서 0c
로 표현하는게 좋을 것 같다
이번엔 'A'를 입력해보겠습니다.
0x000000016fdff5cb
에 'A'를 넣어봅니다.
0x000000016fdff5c0 + 0b
에 16진수 41이 들어갑니다. 우측에는 'A'라고 표시가 됩니다.
어떻게 41이 'A' 될까?
1.16진수 ..041
2.(4x16^1) + (1x16^0)
3.10진수 65
4.아스키 코드 'A'
조금 더 큰 수를 받아보자
c8
부터 a5, 82가 출력됩니다.
82a5로 10진수로 변경해봅니다.
a5, 82는 little endian 방식으로 역순으로 정렬된 것 이므로 다시 정방향으로 정렬합니다.
8 x 16^3(4096) = 32768
2 x 16^2(256) = 512
a(1) x 16^1(16) = 160
5 x 16^0(1) = 5
33445가 출력됩니다.
c8
부터 배열의 데이터 a, b, c, d, e가 메모리의 연속적인 공간에 적재됩니다.