|
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
|