따..딱히 공부하려고 포스팅하는 건 아니니까..!
#define 알다시피 #이 붙은 것은 전처리기이다.전처리기라는 것은 컴파일을 하기 전에 소스코드가 미리 처리를 해버리는 것을 말한다. 즉, #define을 사용하면 컴파일러가 쓰는 기호 테이블에 표시가 되지 않아 파일 오류가 나도 어디서 오류가 났는지 알기가 쉽지 않다. 예를 들어, #define NUM 100 라는 코드를 짰다고 하자. 이 코드만을 봤을 때에는 NUM이 기호식 이름으로 보일지도 모른다. 하지만 컴파일러 입장에서는 NUM은 그냥 100이라는 상수이다. 그래서 에러 메세지가 나면 NUM이 표시되는 것이 아니라 100이라는 상수만 표시가 된다. 그러므로 어디서 오류가 났는지 어렵다는 것이다. 그렇기 때문에 #define을 멀리하고 const, enum, inline을 사용해야 하는 것이다...
포인터와 레퍼런스 포인터 레퍼런스 표현 * & 의미 메모리 주소를 가리킨다 값에 직접 접근하는 주소 변수 접근시 나타나는 값 가리키는 주소가 가진 변수의 값 변수의 내용이 저장된 메모리 주소값 상수 참조 X X NULL 초기화 가능여부 O X 초기화 객체(변수)의 주소값을 입력받음 객체(변수)를 직접 입력받음 초기화 여부 꼭 하지 않아도 됨 반드시 해야함(나중에 값을 바꿀 수 없기 때문에) 초기화 이후 다른 변수 참조 가능 다른 변수 참조 불가능 특징 메모리 공간을 할당함,포인터가 가리키는 주소의 크기는 자료형이 무엇이든 간에 항상 같다. 메모리 공간이 할당되는 것이 아님, 이미 선언된 변수를 다른 이름으로 부르는 것 포인터와 레퍼런스가 생긴 계기입력값을 받는 함수의 변수가 값을 복사한다 -> 항상 복사..
프로세스(Process)란? 간단히 말하자면 실행중인 프로그램을 말한다. 그러나 한 프로그램을 여러 번 실행하여 여러 개의 프로세스를 만들 수 있으므로 프로그램 자체가 프로세스인 것은 아니다. (※ 커널에는 프로세스가 하나밖에 없다 = 커널에서는 모든 자료구조와 메모리를 공유할 수 있다) 텍스트 : 프로세스가 실행하는 실행코드를 저장하는 영역데이터 : 전역변수, 정적변수를 위한 메모리 영역힙 : 동적 메모리 할당을 위한 영역스택 : 함수 호출을 구현하기 위한 영역(함수 호출 시 해당 함수의 지역변수, 매개변수, 반환주소, 반환값 등을 포함하는 활성 레코드가 저장)U-영역 : 열린 파일 디스크립터, 현재 작업 디렉터리 등과 같은 프로세스 정보를 저장하는 영역 프로세스를 유지하기 위해서는 커널 내의 프로세스..