c언어에서 자료형과 주소값에 대해 궁금한 점이 있습니다.
글쓴이: qudals10 / 작성시간: 금, 2017/01/27 - 2:13오후
3년전에 배웠던걸 다시 하려니까 기억이 뒤죽박죽 되있어서 정리하는데 도움을 요청합니다.
1.
보통 int형의 크기가 4byte고 음, 양수의 구분은 몇 앞자리가 0인지 1인지에 달려있는데
저가 궁금한건 이것에 대한 주소값은 어디에 저장되있는건가요??
4byte내인지 아님 다른 곳인지.. 제 기억상으론 다른곳인걸로 기억하는데 많이 헷갈리네요 ㅠㅠ
2.
int num을 선언 했을때 그에 따른 주소값이 있는데
이걸 직접적으로 바꿀수 있나요??
예를들어
num의 주소값이 a라 했을 때 주소값을 apple로 바꾸고 싶다고 임의적으로 변경할 수있는지
2-1. 주소값과 일반 상수(?)를 구분을 컴퓨터는 어떻게 하는지
이건 2번하고 살짝 연계 되있는 질문인데
만약에 2번이 성립한다면 얘네가 숫자를 받아 들이때 구분을 할 수 있다는게 말이 되는거 같은데 어떤 식으로 구분할수 있는건가요?
Forums:
1. 답: 변수의 주소는 프로그램이 어떻게
1. 답: 변수의 주소는 프로그램이 어떻게 동작할지에 대한 정보인 code 영역에 offset 형태로 저장됩니다.
(*동적할당된 변수는 예외입니다.)
우선 메모리에는 변수만 담기는게 아니라, 프로그램을 동작시키는 code라는 기계어가 담기는 공간도 있습니다. offset에 대해 이해하시려면 C/C++언어 보다는 운영체제 책을 조금 보셔야 합니다. 일단
에 대한 이해가 있어야 합니다.
2. 답: 안됩니다.
예를 들어 공책(메모리)에 10페이지를 12페이지에 옮길수 있나요?
내용은 옮길 수 있어도 물리적으로 10페이지를 12페이로 만든다는것 자체가 넌센스입니다.
2-1 변수가 저장된 메모리만 본다면, 주소값과 상수값의 구분은 없습니다.
이러한 정보는 모두 code 영역에 이루어 집니다. 예를 들면,
- 10번 주소의 char와 14번 주소의 char의 덧셈
- 10번 주소의 int와 14번 주소의 int의 덧셈
의 경우 실제 cpu동작이 다른데, 모두 code영역에서 컴파일 시점에 결정되기 때문입니다.
1. 변수의 주소는 당신의 머릿속에 있습니다.
1. 변수의 주소는 당신의 머릿속에 있습니다.
int num같이 선언해주면 컴파일러가 알고 있는거죠
그냥 상수값으로요
2. 못바꿉니다. 그냥 그 주소에 값을 대입하면 돼요
2-1. 주솟값과 상수는 명령어로 구분합니다. 주소값어디에 대입하라는 명령어가 있고 상수 어디에 대입하라는 명령어가 따로 있는겁니다.
코딩할때 당신이 그렇게 코딩하면 되는거겠죠
댓글 달기