유니티에서 C# 코드는 msc.exe라는 프로그램에 의해  IL 코드로 변환됩니다.

(mono 프레임워크의 경우 msc.ec를 사용하며 일반 C#은 다를 수 있음)


C# 코드를 유니티에서 빌드하면 Assembly-Csharp.dll 이라는 파일이 생성됩니다. 이 파일은 IL(Intermediate Language) 형태로 이루어져 있습니다.


그리고 이 IL코드가  실제 기기에서 실행됩니다. mono가 IL 코드를 읽어 어셈블리(바이너리)로 변환시켜 실행되는데 이 과정을 JIT 컴파일링 이라고 합니다.



IL2CPP는 msc.exe가 만든 IL 코드를  il2cpp.exe를 사용하여 C++ 형태로 코드를 변환한 뒤 바로 기계어로 변환시킵니다.


이 경우 JIT 과정이 없기 때문에 성능상 이점이 있으며 보안성도 더 좋습니다.


이런식의 실행 중 컴파일이 없는 것을 AOT 컴파일링이라고 합니다.

'유니티' 카테고리의 다른 글

AssetBundle의 사용 패턴  (0) 2018.03.09
AssetBundle의 기본 요소  (0) 2018.03.07
Resources 폴더  (0) 2018.03.05
Assets, Objects 그리고 직렬화  (0) 2018.03.04
AssetBundles 및 Resources 가이드  (0) 2018.03.03

C#의 가비지 컬렉터는 메모리를 3개의 세대로 나누어 관리합니다.


0세대는 메모리에 최초 할당되는 객체들입니다. 0세대의 용량이 일정 크기를 초과하면 가비지 컬렉터가 다음과 같은 순서로 일을 시작합니다.


1. 메모리에서 참조되고 있는 객체를 검색합니다.

    이 과정을 통해 참조 그래프를 만들어냅니다. 참조 그래프는 다음과 같은 각 스레드에서 실행중인 메소드의 스택 변수, cpu 레지스터 변수가 가지고 있는 참조


2. 참조 되지 않은 메모리들에 대한 마무리를 시도합니다.


3. 참조 되지 않는 객체들을 해제하고 그 메모리를 회수합니다. (해제, 메모리 회수의 과정은 계속 참조 되는 객체들에 대한 힙 영역 재배치, 메모리 할당 포인터를 감소시키는 과정으로 이루어집니다.)


가비지 컬렉터가 활동하는 동안 모든 스레드 작업은 중단되며 해제된 빈 공간을 채우기 위한 객체 위치 조정 또한 이루어집니다.


위의 과정이 이루어지고 계속 사용중인 객체들은 1세대로 승격됩니다.


1세대 또한 할당된 객체들이 일정 크기를 초과하면 가비지 컬렉터의 활동이 시작됩니다.


이는 0세대에서 활동한 방식과 동일하며 여전히 참조 중인 객체가 있다면 2세대로 승격됩니다.


2세대의 경우 일정 크기 초과 시 모든 세대에 대한 가비지 컬렉터 활동이 일어납니다.




단 유니티에서 사용하는 모노의 가비지 컬렉터는 세대를 나누지 않고 단일 세대에서의 가비지 컬렉터 활동을 합니다.

'기본소양' 카테고리의 다른 글

C#에서의 오버로딩과 오버라이딩 그리고 new  (0) 2019.03.15

wsl로 우분투 설치



vi /etc/apt/sources.list


끝에  추가


# Nginx

deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx

deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx

 

# MariaDB

deb http://ftp.kaist.ac.kr/mariadb/repo/10.1/ubuntu xenial main





ondrej의 개인 저장소 이용하여 php apt 설정


apt-get install software-properties-common


add-apt-repository ppa:ondrej/php



apt-get update



apt-get install nginx


service nginx restart



ifconfig로 ip 확인 후 윈도우 브라우저에서 접속하여 nginx 실행 확인



apt-get install php-fpm php-mysql



vi /etc/php/7.2(자신의 php 버전)/fpm/php.ini

vi /etc/php/7.2(자신의 php 버전)/cli/php.ini


두가지 설정 파일에서


data.timezone 부분을 찾아 주석을 지우고  Asiz/Seoul  로 설정




vi /etc/nginx/nginx.conf  의 user 부분을 www-data 로 바꾸고  worker-process 를 auto 로 변경




nginx와 php 연결


vi /etc/nginx/conf.d/default.conf  를 열어서


server {

    listen       80 default_server;

    server_name  localhost;

    root   /usr/share/nginx/html;

 

    location / {

        index  index.php index.html;

    }

 

    location ~ [^/]\.php(/|$) {

        fastcgi_split_path_info ^(.+?\.php)(/.*)$;

        if (!-f $document_root$fastcgi_script_name) {

            return 404;

        }

 

        fastcgi_pass 127.0.0.1:9000;

        fastcgi_index index.php;

        include fastcgi_params;

    }

}


로 수정



vi /etc/php/7.2(자신의 php 버전)/fpm/pool.d/www.conf  를 열어서


listen =  부분을 찾아


listen = 127.0.0.1:9000   으로 수정




phpinfo 확인


vi /usr/share/nginx/html/phpinfo.php  로 파일을 만들어서


<?php

phpinfo();

?>


쓰고 저장 후


아까 윈도우에서 접속 확인한 ip 뒤에 /phpinfo.php 를 붙여 접속 확인

'리눅스' 카테고리의 다른 글

Root 계정 ssh 접속 제한하기  (0) 2018.08.29

+ Recent posts