프로그래밍

 3198, 1/160 회원가입  로그인  
   ysl1121
   C언어 상수 관련 질문입니다 ㅠ 도와주십쇼, 멘붕입니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6555 [복사]


C언어 책을 읽다가 상수 개념 챕터에서 이런 설명을 보게 됐습니다.

예를 들어
int n;
n = 2+5;
라는 코드가 있을 때 이걸 실행하기 위해선 2와 5라는 정수가 메인 메모리 공간에 저장이 된다. 그리고 이 메모리상에 있는 2와 5를 CPU로 이동시켜 계산 후 계산 결과를 다시 메모리상에 있는 변수 n에 저장시킨다.
//이런 설명이 되어있고 그림으로도 메모리 상에 저장되어 있는 2와 5를 CPU 레지스터로 복사해 와서 연산을 한뒤 연산 결과를 메모리 상의 변수n으로 다시 반환하는 모양이 그려져 있더군요.

그런데 구글링을 해보다가 저런 연산식을 어셈블리어로 만들어 놓은 걸 봤는데, 처리방식이 2와 5같은 상수를 바로 레지스터에 쓴 다음에 바로 연산하더군요.
  설명을 들어봐도 문자열 상수같은 경우에는 문자열의 길이가 길어지면
그걸 숫자로 표현하기 위한 데이터 크기가 엄청나게 늘어나 버리니 가상메모리 데이터영역에 문자열을 쓴다음 그 시작주소를 이용하여 값을 전달하거나 복사하는 건 이해하겠는데 숫자(실수든 정수든) 상수의 경우 저렇게 메모리상에 따로 써서 이용할 필요가 없지않나요? 그냥 레지스터에 바로 써서 연산을 하면 되니까요...

아니면 제가 설명을 잘못이해하고 있는건가요? ㅠㅠ 너무 복잡하네요.

아, 그리고 const 상수 관련해서,
const 상수는 변수처럼 메모리 공간을 차지하나요?
그저 변수와 똑같지만 값 변경만 불가능한 건가요,
아니면 메모리 공간은 차지하지 않고
#define을 이용해서 전처리과정에서 기호화된 상수를
다시 원래 리터럴 상수로 바꾸는 작업처럼 컴파일 과정에서 리터럴 상수로 대체 되나요?

C언어 책보면서 독학하고 있는데 너무 헷갈리는게 많아 힘드네요 ㅠ
도와주세요

  Hit : 4535     Date : 2016/06/05 11:03



    
codecaving 질문자분이 말씀하셨듯이 문자열의 길이가 길어지면 메모리에 저장될 데이터의 크기가 너무커질것 아닙니까? 메모리 계층구조를 공부해보시면 cpu안에 있는 레지스터의 경우 주기억장치인 RAM에 비해서 저장용량이 매우 작습니다. 수많은 데이터를 담기에 너무 작은 용량을 가진 레지스터이기 때문에 용량이 큰 주기억장치를 사용하는것입니다. 만약 질문자가 말하듯이 레지스터에 바로 써서 연산하면 속도는 매우 빠르겠죠? 안될건없는데 결론적으로 용량때문입니다.

그리고 const는 형한정어 라고 해서 매개변수나 변수앞에 const라고 적어주면 그변수는 읽기전용으로 밖에 쓸수없다라는 의미를 부여합니다.
2016/07/03  
zldejs22 (답변이 도움이되었으면합니다 :))
* Const 는 메모리를 차지하지만, 변수와는 조금 다른 위치에 잡히게 됩니다. (심층분석하시길)
* 그에 반해 #define, 치환되는 것이라 메모리를 차지 하지는 않습니다.!
2016/07/15  
menial 어려운 질문이군 2018/11/21