기계에 수준에서 상수와 변수를 다르게 취급하는데, 즉시주소지정방식(Immediate Addressing Mode:명령어의 오퍼랜드가 데이터의 주소가 아니라, 명령어 수행에 필요한 데이터 그 자체)을 제공해서, 상수값을 직접 기계어 명령에 집어넣을 수 있게 한다.

위에서 말한것처럼 즉시주소지정방식이 아니라면, 상수값을 메모리에 저장해둔다음 저장된 곳에 접근해야 할 것인데, Operand에 실제 Data가 기록되어 있는 방식이므로, 데이터를 참조하기 위해 주기억장치에 접근할 필요가 없다.

따라서, 이러한 값들을 이용한다고 해서 성능이 나빠지는것은 아니다. 예를들어 #define 매크로 기능을 이용한다치면, 컴파일러는 이름이 있는곳에 직접 값을 바꿔넣기 때문에 컴파일시간문제를 떠나서 효율성 저하없이 프로그램의 가독성을 높일수 방법이 될수도 있다.

C의 경우와 C++의 경우 약간 다른데, C++의 경우 #define외에 const 키워드를 제공하여 상수를 처리한다.
이때 중요한 것은 const의 경우 사용하기에 따라 다르겠지만, const가 변수일수도 있다는 점이다.

const int arrSize1[10] = {0,};
const int arrSize2 = arrSize[0];
int arrSize3[ arrSize2 ];


'Language > C, C++' 카테고리의 다른 글

2. Comment  (0) 2012.03.27

WCF REST Toolkit이 더이상 호스팅이 안되는것 같다.
계속 써도 되겠지만, WCF 서비스를 호스팅할때, url의 .svc가 거슬리면, 아래 코드로 떼버리고 REST스따일로 사용하면 됨.
아니면 RouteTable을 통해서, 해도됨.

public class RestModule : IHttpModule   
{
    public void Dispose() {}
    public void Init(HttpApplication app)
    {
        app.BeginRequest += delegate {
            HttpContext ctx = HttpContext.Current;
            string path = ctx.Request.AppRelativeCurrentExecutionFilePath;
           
            int i = path.IndexOf('/', 2);
            if(i>0)
            {
                string svc = path.Substring(0, i) + ".svc";
                string rest = path.Substring(i, path.Length - i);
                ctx.RewritePath(svc, rest, ctx.Request.QueryString.ToString(), false);
            }
        };
    }
}

+ Recent posts