본문 바로가기

LLVM / clang Complier Compiler는 보통 Frontend, Optimzer, Backend의 3가지 구성요소를 가지고 있다. 일반적인 Compiler 구조 Frontend Lexical(어휘분석), syntax analysis(구문분석), Semantic analysis(의미분석), Immediate code generation(중간코드 생성)source code parsing, error check, Language에 맞는 Abstract Syntax Tree(AST)작성 Optimizer runtime시 성능 향상을 위해 중복계산 제거 및 기타 여러 변환 실행 Backend 각 code를 target architecture에 맞는 instruction set으로 매핑해 실행code 생성 하지만 일반적인..
Coroutine / IEnumerator / IEnumerable StartCoroutine( ) StartCoroutine의 내부를 까보니StartCoroutine_Auto로 수행되고해당함수는 숨겨져있어서 볼수가 없다.아마 C++로 내부적으로 처리하는거같은데.. IEnumerator IEnumerator 는 C++의 iterator같은 것이다.인자값에 ref나 out을 사용할 수 없다. IEnumerator SomeNumbers() { Debug.Log("3"); yield return 3; Debug.Log("5"); yield return 5; Debug.Log("8"); yield return 8; } IEnumerator enumerator; void Start () { enumerator = SomeNumbers(); object cur; cur = enum..
Network Transport / RPC Network Transport Web browser에서 사용되는 HTTP처럼 network가 사용하는 language RPC(Remote Procedure Call, 원격 절차 호출) Program이 network상의 다른 컴퓨터에 위치하고 있는 program에 service를 request하는데 사용되는 protocolRPC는 client / server model을 사용하는데, service를 request하는 program이 client이고 service를 제공하는 program이 server이다.request하는 program이 원격절차의 처리결과가 반환될때까지 일시정지 되어야 하는 Synchronous운영를 사용한다.
COM / DCOM / COM+ / IPC COM(Component Object Model) 단위 software component들이 서로 통신할 수 있게 하즌 표준화 된 방법VB, C++, MFC, ATL, JAVA등 어떤 language를 사용해서 만든 COM객체든 다른 language에서도 재사용이 가능하게 해준다.(.NET Framework로 대체됨) DCOM(Distributed Component Object Model) 인터넷이나 LAN환경에서 서로 다른 컴퓨터끼리의 통신을 지원하는 분산확장형 COM COM+ 분산형 트랜잭션을 동시 처리목적으로 나타난것 IPC(Inter Process Communication) 필요에 따라 process간 정보를 교환해야 할 떄 두 process가 상호 통신하며 정보를 교환하는 방법
GC를 유발하는 몇가지 Case ToString(), ToArray()등의 data converting method C#에서 지원하는 대부분의 data type은 ToString이라는 method를 지원한다.이는 data를 string으로 변환하는 method인데 정확히 말하자면 string을 allocation(새로 할당)하여 해당 string에 data의 type,값 자체를 쓴다.우리가 주목해야 할 부분은 string을 새로 만드는데에 있다.대부분 코드에서 ToString을 남발하는데 매 frame마다 호출되는 Update method에서 ToString을 남발했다가는심각한 frame drop이 발생할 것 이므로 사용을 자제해야 한다. string +연산자 사용 문자열과 문자열을 합쳐주는 ' + ' 연산자는 사용시 비용이 발생한다...
Mark and Sweep / Copying GC Mark and Sweep Mark and Sweep은 GC Algorithm에서도 시초가 되는 algorithm이며 가장 간단한 GC방법이다.이름만 살펴보면 mark, sweep로 알 수 있는데 조금 더 풀어보면 memory가 부족하거나 사용하지 않는 memory를 없애야 할 떄 사용하는 memory를 mark하고 표시가 해제된 memory 영역을 sweep하여 청소하는 방식이다. Application memory에서 새롭게 object가 생성되었을 때의 상태 표시이다.상자들에 붙어 있는 초록색 번개는 사용중인 object를 mark한 것이다.보통은 1개의 Object당 1bit를 사용한다. 오랜시간동안 GC가 sweep을 하지 않아 사용되지 않는 object를 청소하려 했으나 아무것도 없어 그냥 넘어..
Unity CG / Boehm-Demer-Weiser / 점진적 GC Unity GC Unity에서는 Boehm-Demer-Wiser(줄여서 Boehm방식 GC)를 사용한다.이는 Stop the world방식의 GC이다. 하지만 기존의 Boehm방식의 GC는 C / C++을 타겟으로 만들어진 라이브러리였다.그래서 Mono2.8 이상부턴 SGen으로 GC를 변경하였지만Unity는 Mono2.8 이하버젼이므로 Boehm방식 GC를 사용한다. 점진적 GC 비점진적 GC의경우 GC가 발생하면 Stop the world를 한 후 한번에 모든 GC처리를 수행 한 후 프로그램을 작동시킨다.하지만 점진적 GC의 경우 GC작업을 여러개의 슬라이스로 분할하여 GC작업을 위해 프로그램 실행을 한번에 오랫동안 중단하지 않고여러번에 걸쳐 짧게 중단하는 방법이다.GC의 수행시간이 짧아지는건 아니지..
Unmanaged / Managed Pointer, Heap Unmanaged Pointer Unmanaged Heap(GC가 수행되지 않는, non .NET heap)에 할당되는 항시 일정한 선형 주소값을 가지는 Pointer, 기존 C++에 존재하던 Pointer들이 이에 해당된다. Managed Pointer C++ / CLI에 새로 추가된 개념, GC가 수행되는 .NET heap에 할당되는 비일정 선형 주소값을 가지는 Pointer Unmanaged Heap Data를 할당하기 위해서 new 연산자 사용하며 이는 unmanaged pointer를 반환delete 연산자를 이용하여 명시적으로 memory를 할당 해제해야함 Managed Heap Data를 할당하기 위해서 gcnew 연산자를 사용하며 이는 managed pointer를 반환managed hea..