프로그래밍/C C++ 6

메모리 영역

프로그램에서 메모리를 구분하는 방법은 컴파일러 제조사에 따라 조금씩 다르지만 대략 다음과 같이 4 종류의 세그먼트들로 나눕니다. 1. Code Segment - 프로그램 코드가 들어 있는 부분. 2. Data Segment - 전역 변수와 static 변수들이 저장되어 있는 부분 3. Stack Segment - 로칼 변수들이 저장되어 있는 부분 4. Heap Segment - free space로서 dynamic allocation 으로 메모리를 사용할수 있다. 스택 세그먼트는 함수나 프로시듀어에서 선언한 변수들-로컬변수-들을 저장하는 공간으로 함수가 시작되면 변수들이 스택 구조형태로 차곡 차곡 메모리에 할당되어 사용되다가 함수가 종료되면 메모리 할당이 자동으로 해제되는 변수을 저장하는 공간 입니다. ..

크리티컬 섹션(Critical Section)

크리티컬 섹션(Critical Section) 내부적으로 Interlock을 사용하므로 쓰레드 동기화 중에서 가장 빠른 속도로 동작한다. 뮤텍스와 다른 점은 단일 프로세서에 한해서만 동작이 가능하다는 것. 사용 방법은 아래와 같다. * WIN API Critical Section 초기화 void WINAPI InitializeCriticalSection(LPCRITICAL_SECTION lpCriticalSection); Critical Section 릴리즈 void WINAPI DeleteCriticalSection(LPCRITICAL_SECTION lpCriticalSection); Lock 설정 void WINAPI EnterCriticalSection(LPCRITICAL_SECTION lpCrit..

% 서식문자 정리

% 서식문자 정리 %c : 문자 %s : 문자열 %d : 부호있는 10진 정수 %i : 부호있는 10진 정수, %d와 같음 %f : 부호있는 실수 (double이고 소수점은 기본 6자리까지 표시됨) %o : 부호없는 8진 정수 %u : 부호없는 10진 정수 %x : 부호없는 16진 정수(소문자) %X : 부호없는 16진 정수(대문자) %e : e 표기법에 의한 실수 %p : 포인트 %0xd : 자릿수가 x개인 정수, 윗부분은 0으로 채움 %.fx : 소수점을 x자리만큼 출력

프로그래밍/assert

assert() assert(3)의 출력은 정해져 있지 않아 컴파일러마다 조금씩 다름. 일반적으로 assert가 발생된 소스의 파일 이름과 줄 번호를 알려주며 프로그램을 강제로 종료시킴. 프로그램 종료시에는 abort(3)을 사용하도록 되어 있음. assert(3)는 매크로 NDEBUG가 정의되어 있는 경우, ((void)0)으로 확장되어 실제로 기계어 코드를 만들어 내지 않는다. 예제) #include int main(void) { int a = -3; assert(a > 0); } gcc -o test test.c ./test test: test.c:7: main: Assertion `a > 0' failed. assert()의 적용 기준 assert를 사용해야 할지 에러 처리를 해야 할지의 판단 기..