본문 바로가기

Language

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 +연산자 사용 문자열과 문자열을 합쳐주는 ' + ' 연산자는 사용시 비용이 발생한다...
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..
POD / Standard Layout Type / Trivial Type POD(Plain Old Data) 메모리 상에서 연속적인 바이트열을 뜻한다. 실행시간 다형성이나 유저가 정의한 copy constructor등과 같은 진보된 constructor 문법이 필요없을때 객체를 POD로 취급한다. POD로 취급하게되면 하드웨어에서 좀더 효율적으로 객체를 옮기거나 복사할 수 있다. 즉 POD는 class layout이나 user가 정의한 constructor, copy, move constructor등의 복잡성에 대한 고려없이 data 자체로 취급할 수 있는 객체이다. POD객체는 다음 조건을 갖춰야 한다. 표준 레이아웃 타입(Standard layout type)이어야 한다. 간단한 타입(Trivial type)이어야 한다. Standard layout type 기본적으로 s..
객체초기화 ' = ' , ' ( ) ' 의 차이점 객체 초기화시 ( '=' ) 와 ( '( )' )의 차이점 ' = ' 사용 기본 생성자 호출 후에 초기화기본 생성자를 호출 하고 복사대입연산자 ' = ' 를 호출한다. ' ( ) ' 사용 기본생성자의 인자로 초기화값을 사용복사생성자를 한번만 호출, 효율적이다. P.S)Test T = new Test;Test T2 = new Test( ); Test의 생성자가 default 생성자일 경우 위 2줄의 차이점 T의 경우 객체가 초기화 되지 않음T2의 경우 POD이기 때문에 0으로 초기화가 됨
const / #define / constexpr 차이점 const read only data memory에 할당됨 = 주소를 직접 건들이면 const값 변경가능 type을 명시적으로 기록해서 조금 더 안전하다. #define와 같은용도로 사용된 const의경우 release로 build하면 compiler가 자동으로 삭제해준다. const는 값에 대해서만 한정지을 수 있어 충분히 compile time에도 할 수 있는 연산도 run time에 해야한다. #define 메모리에 올라가지 않음 = 임베디드처럼 memory가 부족한 곳에서는 사용해야한다. type을 기록하지 않음 초기 C언어에서 const가 없을때 사용했었음 constexpr 변수 함수, 클래스를 compile time에 정수로 사용할 수 있다. 즉 상수로 취급할 수 있는 작업은 compile t..
Smart Pointer Smart Pointer(RAII객체, 클래스) RAII(Resource Acquisition Is Initialization) C++에서 자주 쓰이는 idiom으로 resource의 안전한 사용을 위해 객체가 쓰이는 scope를 벗어나면 자원을 해제해 주는 기법이다.heap에 쌓이는 자원은 명시적으로 해제해주지 않으면 memory leak이 발생하는데stack에서 사용되는 자원은 명시적으로 해제해주지 않아도 자신의 scope가 종료되면 자동으로 해제된다는 원리를 이용한것 unique_ptr 하나의 smart pointer만이 특정 객체를 소유할 수 있도록, 객체에 소유권 개념을 도입한 smart pointer해당 객체의 소유권을 가지고 있을때만 소멸자가 해당 객체를 삭제할 수 있음move( )함수로 소..
Pointer / Reference 차이점 우선 reference도 결국 내부적으론 Pointer를 사용하므로 작동원리는 동일하다.하지만 차이점이 몇가지 존재한다. Pointer 1) null값 허용2) int *p = &a; // 대상의 주소값을 할당3) 참조대상 변경가능 Reference 1) null값 불가능2) int &p = a; // 참조 대상을 그대로 할당3) 참조대상 변경불가 C++는 기본적으로 함수로부터 객체를 전달받거나 함수에 객체를 전달할 떄Call by value 방식을 사용 이는 복사생성자로 인한 고비용의 연산, 함수 매개변수는 실제 인자의 사본을 통해 초기화, 어떤 함수를 호출한 쪽은그 함수가 반환한 값의 사본을 돌려받음사본 만들어 내는곳 = 복사생성자 Call by reference 사용시 객체 그대로를 전달하기 떄문에..
Mono / Nuget / .NET Framework / .NET Core / Xamarin / Manifest Mono .Net Framework의 OpenSource 개발 Platform으로서 Cross - Platform Application 개발을 지원하며C#과 CLI에 기반을 두고있음(개발자들이 쉽게 Cross Platform Application을 만들 수 있도록 고안된 Software Platform) Nuget .NET을 포함한 Microsoft개발 환경 Platform을 위한 Package ManagerOpen source 기반의 library들을 solution에서 쉽게 가져와 쓸 수 있도록 해주는 도구 .NET Framework Computer의 스펙에 관계없이 VS로 작성한 프로그램이 잘 돌아가도록 하게 해주는것(32bit, 64bit 컴퓨터 관계 없이 잘 작동되게 해주도록, 통일된 규정에 때..