Skip to content

Instantly share code, notes, and snippets.

Avoid Boxing

IL2CPP OPTIMIZATION : Avoid Boxing

__Boxing__은 코스트가 높은 연산이다. 이 글에서는 기존 C# 컴파일러는 특정한 상황에서 불필요한 Boxing이 수행되고, IL2CPP가 이를 어떻게 회피하는지를 보여준다.

기존 C# 컴파일러의 방식

behind_async_await

static async void Foo()
{
    Console.WriteLine("A");

    await Task.Delay(1000);
@pjc0247
pjc0247 / to.cpp.md
Last active February 1, 2017 11:47

to::_string w/ C++

https://github.com/pjc0247/to.cpp/blob/master/to.h

컴파일 타임 타입 가지고 놀기

C++에는 기본적으로 타입이라는 타입이 없고, __RTTI__의 기능은 굉장히 제한적입니다. 하지만 컴파일 타임에는 해당 타입의 여러가지 정보를 가져오거나, 두개의 타입이 같은지 비교하는것도 가능합니다.
이미 __std__네임스페이스 아래에는 수많은 타입 유틸리티들이 포함되어 있으며, to.cpp 프로젝트에서는 아래와같은 함수들을 사용하였습니다. (이름이 직관적이기 때문에 별도의 설명은 달지 않도록 하겠습니다.)

  • std::is_same
  • std::is_pointer

to.cpp

__C++__에 타입 간 형변환 기능을 제공합니다.

STL Container
기본 컨테이너에 to_string 기능이 제공됩니다. (vector, map, initializer_list, string, list ...)

std::vector<int> v({1,2,3,4});

// [1, 2, 3, 4]

Core

  • 스트리밍 HTTP 요청 파싱
    • LINQ 남발하는 파서 정리
    • C++/CLI로 파서 재작성
  • 간단한 리스폰스 보내기
  • gzip 응답
  • chunked 응답
  • keep alive
  • timeout (server-side)
public void AddExceptionHandler()
{
// 유니티 메인 스레드가 아닌 다른 스레드에서 발생한 익셉션은 여기로 핸들링됩니다.
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
#pragma warning disable 0618
// 유니티 스레드에서 발생된 익셉션은 여기로 핸들링됩니다.
UnityEngine.Application.RegisterLogCallback((condition, stackTrace, type) =>
{
if (type != LogType.Exception)

Service(Slack) As A MessageQ

슬랙을 메세지 큐로 사용하기 (공짜 서버 무임승차하기)

목적

슬랙을 게임 서버로 사용한다.
아래의 2_simple_server.rb는 간단하게 작성한 오브젝트 이동만 동기화되는 서버이다.
해당 수준의 서버정도는 슬랙과 함께라면 서버 코드 __0__줄로 처리할 수 있다.

// totest.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
#include <string>
constexpr unsigned short _make_16(unsigned char a, unsigned char b) {
return ((unsigned short)((a & 0xff) | ((b & 0xff) << 8)));
}
constexpr unsigned char _lo_8(unsigned short a) {
return ((unsigned char)(a & 0xff));
}
@pjc0247
pjc0247 / aaa.md
Last active November 30, 2018 22:51

Remit

Runtime-Compile, Runtime-Binding

Things to do

(int n) => {
 var sum = 0;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Reflection.Emit;
namespace Oven