기적같은 디버깅. 컴파일러 버그? 역시나 그럴리가.

으아…일주일전쯤에 발견해서 날 미치게했던 그 버그를 잡았다. 총 쏠때 캐릭터가 사라졌다가 사격을 멈추면 다시 나타나는 버그. VS2010의 v100컴파일러에서 VS2013의 v120컴파일러로 버전을 올리고 난 후 나타난 버그이고 반복된 테스트로 v120컴파일러로 컴파일한 바이너리에서만 나타는 버그라는 결론을 얻었었다. 릴리즈 풀 옵티마이즈 상태에서만 나온다.마침 VS2013은 Update 2 rc버전이다. 즉 VS2013의 v120컴파일러의 옵티마이저 쪽에 버그가 있다고 생각했다. 일단 그때도 Character.cpp의 … More 기적같은 디버깅. 컴파일러 버그? 역시나 그럴리가.

struct align에 대한 단상

동일한 내용의 정보를 가지는  개념적으로는 똑같은 사이즈인 두개의 구조체가 있다. 64비트에서 컴파일해보면 이 두개의 구조체는 각각 다른 사이즈를 가진다. 물론 #pragma pack(push,1)을 주면 똑같은 사이즈로 컴파일 된다. STRUCT_ALIGNED의 크기는 32바이트고 STRUCT_UNALIGNED의 크기는 40바이트다. STRUCT_UNALIGNED구조체의 경우 1차적으로 패널티를 피하기 위해서 변수별로 padding이 들어간다. 변수마다 억세스 단위만큼의 얼라인을 맞추게 되고 최종적으로 구조체가 배열로 잡히더라도 8바이트에 얼라인 될 수있도록 사이즈가 … More struct align에 대한 단상