작성자: [hyacinth] 작성일: [[Date(2013-05-21T02:26:47)]] * 윈도우는 유니코드 문자를 UTF-16으로 인코딩한다(UTF: Unicode Transformation Format). * C언어의 char는 8비트 ANSI 문자를 표현하기 위해 존재한다. * 문자열 간의 비교나 정렬은 매우 일반적인 작업들인데, 이를 위한 최상best 의 함수는 CompareString(Ex)나 CompareStringOrdinal이다. * 윈도우의 GetThreadLocale 함수를 이용하면 함수를 호출한 스레드의 LCID 값을 알 수 있다. * 커널 오브젝트는 커널에 의해 할당된 간단한 메모리 블록이다. 커널에서만 접근이 가능한 구조체로 구성되어 있다. * 프로세스별로 독립된 프로세스 핸들 테이블이 존재한다. * 커널 오브젝트 생성이 실패하면 보통 0(NULL)을 반환한다. 그러나 시스템의 가용 메모리가 매우 작거나 보안상의 이유로 함수가 실패하는 경우 몇몇 함수는 -1(INVALID_HANDLE_VALUE)를 반환하는 함수가 있다. 따라서 반환 값 실패를 비교할 때 상당한 주의가 필요하다. * DuplicateHandle을 이용할 때 절대로 복사된 핸들을 닫아선 안 된다. * DuplicateHandle의 1, 3번째 파라메터에 같은 프로세스 오브젝트 핸들을 넣어 동일 프로세스에서 사용되는 핸들을 복사할 수 있다. 주로 같은 커널 오브젝트에 액세스 권한을 제한한 핸들을 생성할 때 사용할 수 있다. * 프로세스는 일반적으로 실행 중인 프로그램의 인스턴스라고 정의한다. * 프로세스는 두 개의 컴포넌트로 구성된다. 프로세스를 관리하기 위한 목적으로 운영체제가 사용하는 커널 오브젝트와 실행 모듈이나 Dll 코드와 데이터를 수용하는 주소 공간. 주소 공간엔 스레드 스택이나 힙 할당 같은 동적 메모리 할당에 사용되는 공간도 포함한다. * 매개변수에 이름이 없으면, 컴파일러는 "매개변수가 참조되지 않았다."는 경고를 발생시키지 않는다. * 프로세스는 다음 네 가지 방법으로 종료될 수 있다. 1. 스레드의 진입점 함수가 반환된다. 2. 프로세스 내의 어떤 스레드가 ExitProcess 함수를 호출한다. 3. 다른 프로세스의 스레드가 TerminateProcess 함수를 호출한다. 4. 프로세스 내의 모든 스레드가 종료된다. 이 중 1번 만이 유일하게 프로세스의 자원이 적절히 해제되는 것을 보장할 수 있으며 강력히 추천한다. * 프로세스는 자신만의 주소공간을 가지기 때문에 스레드에 비해 더욱 많은 시스템 리소스를 사용한다. 개별 프로세스는 상당량의 정보를 시스템 내부에 저장하고, .exe와 .dll 파일이 주소 공간으로 로드되어야 하므로 파일 리소스가 필요하다. 스레드는 프로세스에 비해 상당히 적은 리소스가 필요한데 사실 스레드는 하나의 스레드 커널 오브젝트와 스레드 스택 정도만 필요로 할 뿐이다. 인터락 함수 - 값을 읽기만 하는 인터락 함수는 필요하지 않기 때문에 존재하지 않는다. 캐시 라인에 대해. 애플리케이션이 사용하는 데이터는 캐시 라인의 크기와 그 경계 단위로 묶어서 다루는 것이 좋다. *항상 단일 스레드에 의해서만 접근되는 데이터를 구성하거나(함수의 매개변수와 지역변수를 사용하는 것이 이러한 방식을 따를 수 있는 가장 쉬운 방법이다.), 단일 CPU에 의해서만 접근되는 데이터를 구성하는 것(스레드 선호도를 사용하여)이 성능을 위해서는 가장 좋은 방법이다. 이 두 가지를 동시에 할 수 있다면 캐시 라인과 관련된 문제를 완전히 피할 수 있다. ---- CategoryDocument