컴파일러 최적화

개발조하·2024년 1월 19일

GameServer

목록 보기
4/9
post-thumbnail

1. 병렬 쓰레드 실행

2. 컴파일러 최적화

기본적으로는 Debug모드로 설정되어있는데, 실제로 게임을 배포하는 등의 작업을 하게 되면 Release 모드로 설정하여 작업하게 된다.
Release모드를 사용하면 자동으로 최적화 기능이 추가되는데, 이로 인해서 멀티쓰레드 기능이 꼬이는 버그가 주로 발생한다.
위와 같은 코드에서 그저 Release 모드로만 바꿨을 뿐인데 실행하면 while(!stop)문에서 무한 실행을 하고 있는 것을 확인할 수 있다.

이에 강제로 최적화를 못하도록 하는 방법이 바로 volatile 변수로 만들어주는 것이다.

  • volatile
    : C/C++ 프로그래밍 언어에서 이 키워드는 최적화 등 컴파일러의 재량을 제한하는 역할을 한다. 개발자가 설정한 개념을 구현하기 위해 코딩된 프로그램을 온전히 컴파일되도록 한다. 주로 최적화와 관련하여 volatile가 선언된 변수는 최적화에서 제외된다.

하지만 C#에서 volatile은 다양하고 복잡한 여러가지 기능을 하기 때문에, C# 전문가들은 volatile의 사용을 지양한다.
메모리 베리어, 락, 아토믹 등을 사용하는 것을 권장한다.

📄참고자료
[인프런] c#과 유니티로 만드는 MMORPG 게임 개발 시리즈_4. 게임 서버
volatile

profile
Unity 개발자 취준생의 개발로그, Slow and steady wins the race !

0개의 댓글