'APIs'에 해당되는 글 3건

  1. 2009.12.30 void *_alloca(size_t size)
  2. 2009.12.29 SwitchToThread(void)
  3. 2009.12.29 volatile 를 사용하는 이유
APIs2009. 12. 30. 14:24
Stack 영역 메모리를 동적으로 생성한다.

New 나 malloc 와 같이 힙영역의 메모리를 생성하는것이 아니라 스레드 스택 영역에 생성된다. 쉽게 말해서 _alloca 로 생성한 메모리는 메모리 해제를 하지 않아도 함수가 종료되면서 자동으로 해지 된다는 거다.
 
Factory 패턴등을 적용하기 위해 Class 를 생성하면서 형변환 한다던지 아니면 생성할 배열을 동적으로 결정해야 한다던지 (이런 경우는 꽤 빈번한 편이다.)에 사용하면 유용할 것 같다.

% 주의 할점은 _alloca 를 통해 생성한 메모리를 함수 밖에서 사용한다거나, loop 문안에서 생성해서 사용한다면, 대략 뻑~

'APIs' 카테고리의 다른 글

SwitchToThread(void)  (0) 2009.12.29
volatile 를 사용하는 이유  (0) 2009.12.29
Posted by 상현달
APIs2009. 12. 29. 18:52

내가 가진 스레드 선점권을 다른 스레드에게 넘기겠다.

추가로 스레드 선점권을 넘기기 위해 Sleep(0)을 많이 사용했다. 그러나 스레드의 우선순위에 따라 선점권이 다른스레드로 넘어가지 않을수 있다.
Sleep(0) 은 자신과 같거나 더 높은 우선순위의 스레드가 대기상태일때만 선점권을 넘기고 자신보다 낮은 우선순위의 스레드들이 대기상태이면 선점권을 넘기지 않는다.

SwitchToThread 나 Sleep(1) 과 같이 사용하면 스레드 선점권이 확실히 넘어 가겠다.

'APIs' 카테고리의 다른 글

void *_alloca(size_t size)  (0) 2009.12.30
volatile 를 사용하는 이유  (0) 2009.12.29
Posted by 상현달
APIs2009. 12. 29. 17:32
volatile 은 const 와 같이 변수의 특성을 변경 시켜주는 키워드 이다.
사용 빈도가 크지 않아서 진짜 필요할때 사용 못하는 경우가 많다.

volatile 은 두 가지로 변수의 특성을 변경한다.

1, 컴파일러가 컴파일시 최적화를 하지 않는다.

컴파일러가 컴파일 할때 소스를 그대로 컴파일 하여 바이너리로 변환되지 않는다.
컴파일러는 점점 진화 하고 있고, 개발자의 몹쓸 소스들을 자동으로 변경하여 컴파일 한다.

대표적으로 많이들 알고 있는 것은 사칙연산, 반복문을 변경하거나 작성된 소스라인 순서를 변경하기도 한다.

위와 같은 경우 해당 변수가 컴파일러 최적화에 의해 오동작을 방지 하기 위해 사용한다.

2, 메모리 베리어(펜스)를 포함하고 있다.

변수에 값을 대입 할때 (메모리에 write 할때) 항상 공유메모리에 직접 쓰거나 읽지 않고 쓰기버퍼(저장 버퍼)에 값을 임시로 저장했다가 실제 공유메모리에 Write 할수 있다. 이럴경우 멀티스레드 환경에서 메모리를 읽었을때 기대하는 값이 나오지 않을수 있다.

위와 같은경우 해당 변수가 항상 공유메모리를 사용하도록 보장받기 위해서 사용한다.

'APIs' 카테고리의 다른 글

void *_alloca(size_t size)  (0) 2009.12.30
SwitchToThread(void)  (0) 2009.12.29
Posted by 상현달