본문 바로가기

분류 전체보기6

C 언어의 포인터란? C 언어의 포인터(Pointer)란 데이터의 주소값(데이터가 저장된 메모리의 시작 주소)을 저장하는 변수다. 그래서 포인트 변수라고도 부른다. 포인터를 선언할 때는 담고자 하는 자료형에 *(참조 연산자)를 붙여서 선언한다. 예를 들어 int형 변수의 주소를 저장하려면 int *, char형 변수의 주소를 저장하려면 char *와 같은 식이다. 운영체제 내에서 포인터의 크기는 동일하다(32bit 운영체제의 경우 4byte, 64bit 운영체제의 경우 8byte로 동일). 그럼에도 불구하고 포인터 앞에 타입을 명시해주는 이유는 참조 연산자를 통해 값을 참조할 때 타입을 보고 참조할 메모리의 크기를 알 수 있기 때문이다. 포인터는 NULL(0)으로만 초기화가 가능하다. 포인터는 선언과 동시에 초기화를 해주는 .. 2023. 1. 10.
프로세스 Process / 스레드 Thread 프로세스 Process 프로그램이 메모리에 적재되고 CPU 자원을 할당받아 실행되고 있는 상태를 의미한다. CPU가 스케줄러에 의해 여러 프로세스를 번갈아 실행하는 것을 Context Switching(문맥 교환)이라고 한다. Context Switching이 빈번하게 발생할 경우 오버헤드가 발생하여 프로그램 성능에 문제를 일으킬 수 있다. 각 프로세스는 독립된 메모리 영역을 할당받기 때문에 한 프로세스에서 다른 프로세스의 메모리 영역에 접근할 수 없다. 그러기 위해서는 파이프나 소켓 같은 IPC(Inter-Process Communication)를 사용해야 한다.     스레드 Thread 프로세스 내에서 실행되는 흐름의 단위. 하나의 프로그램은 하나 이상의 프로세스를 가지고 하나의 프로세스는 하나 이.. 2023. 1. 10.
컴파일 타임 Compile time과 런 타임 Run time의 개념 컴파일 타임 Compile time개발자가 Java나 C 같은 개발 언어로 작성한 소스코드를 컴퓨터가 이해할 수 있는 기계어로 변환하여 실행 가능한 프로그램으로 만드는 과정을 의미한다. 컴파일 과정에서 나는 오류를 컴파일 오류라고 하며 구문 오류(Syntax error)나 파일 참조 오류가 이에 속한다. 컴파일 에러가 발생하면 에러를 발생시킨 소스코드를 알려준다.Java의 경우 컴파일 과정을 거치면 바이트 코드로 변환된다. 런 타임 Run time컴파일이 끝난 프로그램이 실행되는 때를 런 타임이라고 한다. 프로그램 실행 중에 나는 오류를 런 타임 오류라고 하며 널 참조 오류, 메모리 부족 오류가 이에 속한다. 런 타임 오류는 컴파일 중에는 감지하지 못하며 프로그램이 실행되어야만 확인이 가능하다. - Re.. 2023. 1. 10.
JVM(Java Virtual Machine), 자바 가상 머신이란? JVM은 Java Virtual Machine의 약자로 직역해 자바 가상 머신이라고도 부른다. JVM은 Java 애플리케이션과 운영체제 사이의 중개 역할을 하여 Java 애플리케이션이 운영체제에 대한 종속, 제약 없이 실행될 수 있도록 해주는 일종의 가상 컴퓨터다.     JVM의 구성 자연어로 작성된 원시코드를 기계어로 변환해주는 걸 컴파일이라고 하는데 자바 소스 코드(.java)의 경우 컴파일 과정을 거친다고 해서 바로 기계어로 변환되는 게 아니라 Java Compiler에 의해 JVM이 읽어 들일 수 있는 자바 바이트 코드(.class)로 변환된다. 바이트 코드는 기계어는 아니지만 가상 머신에 의해 손쉽게 기계어로 변환될 수 있는 중간 언어다. ✔ 클래스 로더 Class LoaderJVM에 자바 바.. 2023. 1. 10.
Java 가비지 컬렉션(Garbage Collection, GC), 가비지 컬렉터 가비지 컬렉션 Garbage Collection이란?     프로그램을 실행하면 Heap 영역에 메모리를 동적으로 할당받은 객체들이 생겨난다. JVM의 런타임 데이터 영역 Runtime Data Area은 총 다섯 개로 나뉘는데 그중 Method나 Stack 영역과 같은 Root 영역에서는 Heap 영역에 생성된 객체의 주소를 참조하는 형식으로 구성된다. Heap 영역의 객체들은 해당 객체의 주소를 가리키고 있는 참조 변수가 삭제되는 경우 참조되고 있는 상태(Reachable)에서 참조되고 있지 않은 상태(Unreachable)로 바뀌고 시스템 내에서 더 이상 사용되지 않는 가비지가 된다. 가비지 컬렉션은 Heap 영역에 존재하는 Unreachable 한 객체를 주기적으로 제거하여 해당 객체가 불필요하게.. 2023. 1. 10.
메모리 구조(코드, 데이터, 스택, 힙), 동적/정적 할당 메모리 구조 Memory Structure  컴퓨터의 운영체제(OS)는 프로그램 실행을 위해 해당 프로그램을 메모리(RAM)에 로드한다. 메모리는 낮은 주소(Low address)에서 높은 주소(High address) 순으로 코드, 데이터, 스택, 힙 영역으로 나뉜다.   ✔ 코드 영역 Code실행할 프로그램 코드가 저장되는 영역. 텍스트 영역이라고도 부른다. 함수, 제어문, 상수 등이 코드 영역에 저장되고 CPU는 코드 영역의 명령어를 처리한다. ✔ 데이터 영역 Data 프로그램의 전역 변수와 정적 변수가 저장되는 영역. 컴파일 시점에 크기가 결정된다. 프로그램 시작 시 할당되었다가 프로그램이 종료되면 소멸한다. ✔ 스택 영역 Stack 함수 호출과 관련된 지역 변수와 매개 변수가 저장되는 영역. 함.. 2023. 1. 9.