ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 상수에 대한 간단한 고찰
    프로그래밍언어론 2023. 3. 22. 20:31

    프로그램에서의 상수

    프로그램에서 쓰이는 이름중 상당수가 상수이다.
    이때의 상수는 대부분 Read의 목적인 경우가 많다.

    값을 메모리에 저장하고, 한번 저장되고 나서 변경되지 않는다.
    읽기접근 또는 전달하는 목적으로 사용된다.

    컴파일러측면에서는 이는 코드 개선에 활용된다.

    코드개선측면

    • 수식에서 불필요한 계산을 삭제할 수 있다.
    • load / store를 줄일 수 있다.
      • 상수이면 컴파일러가 load, store가 불필요하다고 판단하기 때문
    • 명령문간 의존성이 줄어든다.

    병렬처리측면

    • 해당 상수를 복제 생성이 가능하다.

    추가로 가독성또한 향상된다.

    상수의 종류

    컴파일시간 상수

    • 값이 컴파일시에 결정된다.
    • 컴파일러가 그 값을 알고 코드생성시 그 값을 활용 가능하다.
    • 코드의 의미와 컴파일러 성능에서 중요한 역하을 ㅎ나다.
    • 값이 컴파일시에 정해지고 이후에 변경이 불가하다.
    • 객체(메모리)를 할당하지 않는다.
      • 상수풀에서 저자오딘 값으로 이름을 대체한다.

    C의 const, 자바의 static final로 선성된다.
    컴파일시간 상수는 C의 배열 선언시 크기 지정할때 사용되고, case문 값에 사용된다.

    가독성을 위해서 코드값, 분류 기준값이나 미리 정해지는 초기 설정값은 상수로 하기를 권장한다.

    참고로 자바는 이를 enum을 사용하기를 권장하는데, enum은 메모리 할당이 되므로 주의

    • 상수식
      • 컴파일러가 계산할 수 있는식
      • 연산자와 상수를 포함한 수식

    컴파일러측면에서는 값을 컴파일 시점에 알 수 있다.
    작은 값이면 명령문에 끼워 넣을 수 있고(load, store불필요), 코드 생성시 직접 참고가 가능하다.

    실행시간 상수

    • 컴파일러는 해당 값을 모르고 실행시 그 값이 정해진다.
    • 실행중 한번 초기화 또는 객체가 생성된 후 초기화된 그 이후 변경되지 않는다.
    • 컴파일러에 의해 값을 변경할 경우 오류가 발생한다.(의미분석단계)

    이경우는 자바의 final이 해당한다.

    • final 지역변수는 한번 초기화되면 다시 값을 지정 못한다.
      • 보통 선언과동시에 초기화 or 반드시 지정된 곳에서 초기화 해야 한다.
    • finald필드에서는 객체 선언시 초기화 또는 생성자에서 초기화된다.
    • final지역변수는 선언 또는 처음 사용하기전 한번만 초기화된다.

     

    • 매개 / 지역변수의 const
      • 전달된 매개변수의 값을 함수에서 바꾸지 않거나 초기화 이후 값을 변경하지 않는다.
    • const 멤버변수
      • 생성자에서 초기화한다. (선언시 초기화 불가)
    • 포인터 const
      • 이때는 const우선순위가 가장 높다.
      • const 타입* 이름 -> 값이 불변
      • 타입* const 이름 -> 주소 불변
    728x90

    '프로그래밍언어론' 카테고리의 다른 글

    객체의 생명주기  (0) 2023.03.27
    힙 할당과 가비지 컬렉터  (0) 2023.03.27
    메모리 영역  (2) 2023.03.20
    바인딩  (0) 2023.03.11
    컴파일러 구조(~후단부)  (0) 2023.03.11

    댓글

Designed by Tistory.