ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ProgrammingLanguages : Question : 1
    Computer Science/etc 2020. 6. 15. 16:07
    728x90

    1.      

    Languages that employ a reference model of variables also tend to employ automatic garbage collection.Is this more than a coincidence? Explain.

     

    garbage collection이란, 동적으로 할당된 메모리 영역 가운데 더 이상 사용할 수 없게 된 영역을 탐지하여 이를 자동으로 해지하는 기법이다. 더 이상 사용할 수 없게 된 영역이란, 어떠한 변수도 가리키지 않게 된 영역을 뜻한다.  reference model이란, object 그 자체가 아닌 object에 대한 reference를 참조 대상으로 하는 모델을 말한다. reference model은 한 값(object)을 참조하는 여러 개의 변수가 생성될 수 있기 때문에, reference model에서 수동적으로 항목들을 추적하여 GC의 대상이 되는 항목인지를 판단하는 것은 비효율적이다. 

     


    2.     

    Consider the following expression in C: a/b > 0 && b/a > 0. 

     

    (1) What will be the result of evaluating this expression when a is zero?

     

    C에서는 short-circuit evaluation에 의해, 위와 같은 expression에서, ‘a/b>0’을 먼저 판단한 후, ‘b/a>0’을 판단한다. a 0이라면, ‘0/b=0’ 이므로‘0>0’ false가 된다. and 연산이므로 ‘b/a>0’은 거치지 않는다. 

     

     

    (2) What will be the result when b is zero?

     

    b 0이라면, ‘a/b>0’에서 0으로 나누는 형태가 되므로 컴파일러는 divide by zero에 해당하는 예외처리를 하게 된다. 

     

     

    (3) Would it make sense to try to design a language in which this expression is guaranteed to evaluate to false when either a or b (but not both) is zero?

     

    0으로 나누는 행위는 사용자가 가장 많이 하는 오류, 실수 중에 하나이다. 따라서 위의 expression 이전에 a 또는 b 0인지 아닌지를 판단하는 expression이 있다면 더욱 잘 구현된(합리적인) 설계일 것이다. 그러나 위의 expression만 보면, evaluation의 순서(left-to-right 또는 right-to-left)를 미리 신뢰할 수 있는 방법은 없다.  

     


    3.     

    Why is it generally expensive to catch all uses of uninitialized variables at run time?

     

    일반적으로, 선언 시 초기값을 할당하지 않는다면, default value로 설정된다. 반면, 모든 변수에 대하여 default value를 제공하는 것 대신에, 초기화 되지 않은 변수를 dynamic sematic error로 하여 run time에 이 error를 알 수 있도록 하는 것을 dynamic check이라고 한다. 만약 적절한 하드웨어의 지원이 있다면, dynamic check은 특정 type에 대해 더 저렴한 방식이 될 수 있다. 하지만 일반적으로 run time에 초기화 되지 않은 모든 변수를 찾는 것은 매우 비싼 과정이다. run time 시 초기화 되지 않은 변수이든 초기화 된 변수이든 모든 변수를 찾는다고 가정하자. 이 변수가 초기화 되어 있는지 아닌지를 판단하기 위해, 추가적인 flag가 필요하고, 이는 추가적인 메모리 공간이 필요함을 의미한다. expression에 변수가 등장할 때마다 이 flag의 값이 무엇인지 확인해야 한다. 이뿐만이 아니다.  flag elaboration time에는 uninitialized set되어야 하고, assignment time에는 initialized set되어야 한다. 이 과정을 위해 추가적인 코드가 필요하다. 이 모든 과정을 매 순간 반복하는 것은 효율성을 강조하는 컴퓨터 구조에서는 맞지 않은 비효율적인 과정이다.

    728x90

    댓글

kxmjhwn@gmail.com