2020 이전/이것저것

한줄설명

이상해C++ 2019. 1. 11. 13:49

컴파일: 코드를 실행할 수 있는 바이너리 코드로 변환해주는 작업.


컴파일타임에 일어나는일:

1. 전처리기(#을 처리해준다. 실제 바이너리 코드로 변환될 코드들을 걸러주는 등의 작업 수행)

2. 컴파일(코드를 어셈블리 코드로 변환한다)

3. 어셈블(어셈블리 코드를 목적코드로 변환한다)

4. 링크(목적코드들을 링크한다)


explicit: 암시적인 타입변환을 막는 C++의 키워드


BSS, DATA: 분리한 이유, data영역의 초기화된 변수의 초기 값들은 초기화 값을 기억해야하기 때문에 object파일 안에 저장을 하고있다. 초기화를 해주지 않은 변수는 object파일에 들어갈 필요가 없고 그런 변수의 개수가 몇개인지만 기억한다. 오브젝트 파일이 실행파일이 되고 실행시켜 메모리에 올라가 프로그램이 되면, 초기화가 되지않은 변수는 bss 세그먼트에 그 개수만큼 메모리를 잡고 0으로 초기화가 된다. 


스택 메모리: 함수 호출과 관계되는 지역변수와 매개변수, 그리고 return address가 저장되는 영역. 


힙 메모리: 동적 메모리 할당을 위해 메모리를 잡아주는 공간. 필요할 때 운영체제로 부터 할당을 받고 사용이 끝나면 메모리를 반환해야한다. 


동적 메모리 할당: 사용자가 요청하여 런타임 동안 사용할 메모리 공간을 할당받는 것.

정적 메모리 할당: 프로그램 실행시 할당된 메모리가 미리 정해져있는 것. 


프로세스: 고유의 메모리 영역을 가지고 있고, 파일 입출력을 할 수 있으며, 고유 프로세스 id를 가지고있는 entity.


프로세스 생성과정: unix에서는 fork()라는 시스템 콜을 이용하여 새로운(child) 프로세스를 생성한다. 


Fork(): 현재 프로세스에서 자기와 동일한 프로세스를 생성한다. 똑같은 코드의 프로세스가 2개 만들어지기 때문에 리턴값이 2개가있다. 부모 프로세스에서는 자식의 프로세스 아이디가 리턴되고, 자식 프로세스에서는 0이 리턴된다. 


프로세스 상태(process state):

New : process management에 등록 되기 전, 프로세스가 막 생성되었을 때의 상태

Ready: 프로세스가 실행될 준비가 다 되었지만 현재 CPU가 실행하지 않는 상태

Running: CPU에 의해서 실행되고 있는 상태

Waiting: Running상태에서 I/O 출력이나 이벤트가 일어나서 프로세스에 의해 자원이 준비될 때까지 대기해야하는 상태. (키보드 입력, 디스크 접근 리퀘스트, 프로세스간 메세지 통신 inter-process message, 자식프로세스 완료 대기)

Terminated: 프로세스가 완료된 상태


'2020 이전 > 이것저것' 카테고리의 다른 글

포워드, 디퍼드 렌더링  (0) 2019.03.21
vector index접근 iterator 접근  (0) 2019.01.15
드로우 콜과 텍스처 아틀라스와 배치와 인스턴싱  (0) 2018.11.08
xml & json  (0) 2018.11.05
Singleton  (0) 2018.11.04