일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- linux
- GJK
- dp
- 우분투
- Doubly Connected Edge List
- 백준
- 내적
- uclidean algorithm
- 문제풀이
- 분할축 이론
- 외적
- PS
- Graham Scan
- 벡터
- AABB
- ubuntu
- SOH
- Vector
- 알고리즘
- 다이나믹 프로그래밍
- C++
- 보로노이다이어그램
- 리눅스
- 수학
- 충돌 알고리즘
- Expanding Polytope Algorithm
- Unity
- C
- 유니티
- c#
- Today
- Total
목록Code (7)
마이 플밍 블로그
pyodide에선 tkinter안됨
GC란? 다들 알다시피 C#은 C나 C++과 달리 직접 메모리 해제를 할 필요가 없다. 이렇게 할 수 있는 이유로는 Garbage Collector라는 것이 있기 때문인데 이것은 CLR(Common Language Runtime, 공용 언어 런타임)에서 자동메모리 관리기능을 한다. GC덕에 우리는 메모리 관리 부담을 덜하면서 개발할 수 있다. 1. CLR의 메모리 할당 C#에서의 할당을 보자면 소스코드 컴파일 후 실행하면 CLR에선 일정 크기의 메모리를 확보하게된다. 이렇게 관리되는 Heap 메모리 영역을 Managed Heap라고 한다. 이렇게 확보한 Managed Heap의 첫번째 주소에 다음 객체를 할당할 메모리 주소를 메모리의 포인터로 가리킨다. 객체를 생성하게 된다면 포인터가 가리키고 있는 주소..
C++의 STL에는 Vector와 List라는 컨테이너가 있다. 언뜻보기에는 두 컨테이너에는 차이가 없는것 처럼 보이지만 사실 큰 차이점이 있다. 1. Vector Vector 컨테이너는 일반적인 배열처럼 연속적인 메모리 공간에 저장하는 방식. 후에 들어올 요소들을 대비해 미리 예비 공간을 할당함. 배열과 달리 크기의 제한을 받지않음.(32bit 기준으로 10억개 정도는 있긴함) 맨뒤에 추가하는건 빠르지만 중간에 삽입할 시 O(n)만큼의 시간이 걸림. 중간에 삽입시 원소들을 뒤로 밀어냄. [1] 과 같이 랜덤 접근이 가능함. 동적으로 크기가 확장되지만 비용이 큼 2. List List 컨테이너는 더블 링크드 리스트로 구현되어 있음. 값을 추가할 때마다 메모리를 할당함 중간에 있는 특정 원소를 찾기 위해서..
memset 함수는 메모리의 값을 원하는 범위만큼 값을 변경 시켜주는 함수다. 더보기 void* memset(void* ptr, int value, size_t num); 첫번째 ptr은 메모리의 시작 주소 두번째 value는 바꿀 값 세번째 num은 메모리 길이를 뜻한다. 이 길이는 바이트 단위로써 메모리 크기 한조각단위의 길이를 뜻한다. sizeof(타입) 으로 하면 된다. 함수가 제대로 작동하면 맨 처음인자인 ptr이 반환되고 실패하면 NULL을 반환한다. 예제 #include #include using namespace std; int main() { char arr[20]; cin >> arr; memset(arr, 'b', 3 * sizeof(char));; cout
함수는 사용될 때마다 일정량의 오버헤드를 발생시킨다. CPU가 함께 실행중인 다른 레지스터와 함께 사용 중인 함수의 주소를 저장해야 해서 모든 함수 매개 변수를 생성해야 한다. 할당 된 값을 사용한다면 프로그램이 새 위치로 분기된다. 내부에서 작성 된 코드가 더 빠르다. 함수 호출시 다음과 같은 과정을 거치게 된다. 함수 호출 -> 호출 된 시점의 함수 주소 값 스택에 저장 -> 함수 매개변수 스택에 저장 -> 함수실행 함수 종료 -> 함수 리턴 값을 임시 저장소에 저장 -> 스택에서 호출 시점 주소 값 가져옴 -> 호출 시점으로 복귀 엄청 큰 함수 몇개만 사용한다면 큰 문제는 없지만 작은 함수 여러개를 쓴다면 많은 성능저하가 일어날 것이다. 컴파일러에서는 이런 오버헤드를 줄이기 위해 스스로 코드를 최적..
간혹 프로그램을 작성하다 보면 특정 클래스에 메서드를 추가하고 싶은 경우가 있다. 그게 내가 만든 클래스라면 직접 파일을 열어서 추가하면 되지만 외부 라이브러리를 사용할 시 직접 수정하지 못하게 막아놓은 경우도 있을 것이다. 그럴 경우에 사용하면 되는 것이 확장메서드이다. 확장메서드를 사용할 시 클래스 내부가 아닌 외부에서 메서드를 정의함으로서 기존 형식의 코드변경 없이 외부에서 대상 형식에 메서드를 추가할 수 있다. 확장메서드 만들기 확장메서드는 static클래스 안에서 static 메서드로 정의된다. public static class ExtensionMethod { public static void TestExtensionMethod1(this string a) { Console.WriteLine(..
복잡한 문자열 처리를 위해서는 Regular Expression를 사용한다. 닷넷에선 이 기능을 Regex 클래스를 중심으로 구현을 했다. Regular Expression의 기능은 Perl에서 진화한 것인데 Perl 5 Regular Expression와 호환 되도록 하였다 Regular Expression을 이용하면 문자열 데이터에서 특정 패턴을 찾아내고 다른 문자열 데이터로 치환할 수 있다. Regex 문자열 패턴 찾기 Regex 클래스를 활용해 특정 문자 패턴을 찾는 몇가지 예를 보자 Regex를 생성할 때 특정 문자패턴을 파라미터로 넘긴다 Match()메서드를 이용해서 문자열에 문자 패턴이 존재하는지 검사한다. Regex.Match는 Match 클래스 객체를 리턴한다. 존재한다면 Match.Su..