[cs, ue]컴파일러의 중요성

Date:

카테고리:

컴파일러 자체의 최적화

메모리 주소에 관하여

#include <iostream>

int main()
{
    int i = 10;

    while (i--)
    {
        char pokemon[21];
        printf("%p\n", pokemon);
    }

    return 0;
}

위의 코드를 비주얼 스튜디오 2019 기준 C++17 버전으로 컴파일 하게 되면

반복문을 들어가면서 부터 메모리가 할당이 되고, 해제가 되면서 보통이면

배열의 주소가 다른 주소로 나와야 정상적이라고 말할 수 있다.

하지만 배열의 주소를 확인해보면, 같은 주소 공간을 사용하는 광경을 목격하게 된다.



C++의 표준은 반복문의 각 호출마다 지역 변수를 새로 할당하고 초기화하는 것을 요구한다.

즉, 일반적인 경우에는 변수는 다른 메모리 주소를 갖게 된다.

하지만 컴파일러가 플래그 설정이나 최적화 요소에 따라 다른 결과가 나타나게 되는 것이다.


언리얼 엔진의 컴파일러

그러면 이제 여기서 드는 생각은 우리는 언리얼 엔진의 코드를 수정할 때 비주얼 스튜디오를 보통 사용한다.

이 말은 즉, 버전이 다르거나 플레그 설정이 조금만 달라도 최적화나 퍼포먼스 등에도 아주 큰 차이를 보인다는 것이다.

그럴일은 잘 없겠지만 같은 코드로 컴파일 하더라도 어떤 컴파일러는 성능이 더 떨어질 수도 있다는 이야기이다.



언리얼엔진은 컴파일러에 대한 구체적인 지정을 하고 있지 않지만 사실 현업의 대부분이 비주얼 스튜디오를 쓸 것이기에 문제가 없을 수도 있다.

(게임 개발 기준, 웹이나 어플리케이션 쪽은 비주얼 스튜디오 코드가 더 사용량이 많다.)

하지만 만약 다른 컴파일러가 나오고, 그 컴파일러를 사용하는 이유가 이러한 이유라면 개발자도 알아야 하지 않겠는가?

이것은 게임 개발 외의 다른 개발자들에게는 오히려 더 중요한 요소가 될 것이다.



c++을 사용하는 이유 자체가 최적화를 위한 것인데, 주소 공간 자체를 우리가 직접 설정하는 것은 아니기 때문에

어느정도는 컴파일러에게 맡겨야 하는 부분이 많다.

플레그 설정만 좀 잘하는 사람이라면 이러한 요소들을 알고 이용할 수 있기 때문에

더욱더 경쟁력 있는 개발자가 되지 않을까 싶은 생각이다.


마치며

세상에 지식은 많지만, 우리가 그것을 전부 활용할 시간도, 능력도 부족한게 현실일 것이다.

모든 것을 알고 하려고 해도 시간이 부족할 것이고, 회사에서 요구하는 조건도 다를 것이다.

나는 사실 이정도만 알고 있으면 된다고 생각한다. 나에게 있어서 더 중요한 능력은 이런

잡기술이 아니라, 회사가 요구한 요소를 해결할 수 있는 실력이니까.

하지만 이런 직접적인 개발 외의 요소들은 항상 재밌다.

CS 카테고리 내 다른 글 보러가기

댓글 남기기