1. 컴파일(Compile)
원시코드에서 목적코드로 옮기는 과정을 컴파일이라고 한다.
우리의 언어는 컴퓨터가 이해하지 못하기 때문에 컴퓨터가 이해할 수 있는 통역 역할을 하는것이다.
2. 레지스터(Register)
특정한 목적에 사용되는 일시적인 기억장치.
데이터를 읽고 쓰는 기능이 매우 빠르며, CPU 내부에 사용된다.
CPU의 내부에 존재하며 고속 메모리로 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 공간이다.
3. SMA(Static Memory Allocation)
정적 메모리 할당.
메모리할당 방법중의 하나로, 메모리의 크기가 하드코딩되어 있기 때문에
프로그램이 실행될 때 이미 해당 메모리의 크기가 결정되는 것이 특징이다.
4. DMA(Dynamic Memory Allocation)
동적 메모리 할당.
프로그래밍에서 실행시간 동안 사용할 메모리공간을 할당하는것을 말한다.
프로그램이 실행하는 순간 프로그램이 사용할 메모리 크기를 고려하여 메모리의 할당이 이루어지는 정적 메모리
할당과 대조적이다.
5. Stack 영역
특정 구문 내에서 임시로 할당하는 메모리 영역으로 '{ }'와 같은 브레이스(braces : 중괄호)내에서 유효한
데이터가 저장된다.
'{'를 만나면 새로운 Stack영역이 시작되고 '}'를 만나면 생성했던 데이터들이 해제된다.
6. 매개변수
변수의 특별한 한 종류로서, 함수 등과 같은 서브루틴의 input으로 제공되는 여러 데이터중 하나를 기리키기 위해
사용된다. 보통 매개변수의 목록은 서브루틴의 정의 부분에 포함되며, 매번 서브루틴이 호출 될 때마다 해당
호출에서 사용된 전달인자들을 각각에 해당하는 매개변수에 대입시켜 준다.
7. 재귀함수(Recusive function)
자기 자신을 다시 호출하는 함수.
8. 힙영역(Heap)
프로그램에서 자유롭게 할당하고 해제할 수 있는 영역.
힙 영역에 메모리를 할당하거나 해제하려면 명시적으로 함수를 호출해야 한다.
32bit 운영체제에서는 일반적으로 약 2GByte의 힙 영역을 할당할 수 있으며 OS환경에 따라 크기 차이가 있을 수
있다. 64bit 운영체제는 이론상 한계치가 있긴 하지만 사실상 제한이 없다고 봐도 된다.
하지만 힙 영역에 메모리를 할당하고 해제하는 것을 잊어버린다면 메무리누수(Memory Leak)가 생길 수 있다.
메모리 누수 문제는 프로그램이 실행되는 동안 시스템의 메모리가 계속해서 잠식해나가 결국 시스템에
치명적인 문제를 일으킬 수 있다.
따라서 malloc, calloc, new 등의 할당 함수를 통해 힙 영역을 할당 받았다면 반드시 사용 후에
free, delete 등의 함수로 해제를 해줘야 한다.
9. 메모리누수(Memory Leak)
컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상.
프로그램이 메모리를 할당 후 해제하지 않아서 시스템의 메모리를 고갈시키는 소프트웨어 오류이다.
10. Data영역
bss, data영역을 묶어서 data영역이라고 한다.
전역변수, 정적(static)변수, 배열, 구조체 등이 저장되는데 프로그램이 실행될 때 할당되고 종료될 때 해제된다.
이때 초기화 된 데이터는 data영역에 저장되고 초기화 되지 않은 데이터는 BSS(Block Stated Symbol) 영역에
저장된다.
11. 전역변수
어느 지역에서나 사용할 수 있는 변수이다.
전역변수로 선언하면 main함수이든, functionTest함수이든 변수 사용이 가능하다.
이 전역변수는 프로그램의 시작과 동시에 메모리 공간에 할당되어서 프로그램이 종료될때까지 존재한다.
또한 지역변수와는 다르게 별도의 값으로 초기화 하지 않으면 0으로 초기화 된다.
12. 정적(static)변수
전역변수의 단점을 부분적으로 보완한 변수가 정적변수이다.
정적변수는 변수의 자료형 앞에 static 키워드를 넣어 만든다.
전역변수처럼 프로그램이 종료되지 않는 한 메모리가 소멸되지 않고, 특별히 초기값을 지정하지 않아도 자동으로
0을 가진다.
주의사항으로는 전역변수와 마찬가지로 초기화 할 때 반드시 상수를 초기화 해야 한다.
13. BSS(Block Stated Symbol)영역
.bss나 bss는 초기에 오직 제로값으로 표시된 정적으로 할당 된 변수가 포함된 데이터 세그먼트의 일부로
컴파일러나 링커에 의해 사용된다.
즉, 초기화되지 않은 전역 데이터를 위한 영역이다.
일반적으로 프로그램 로더가 프로그램을 로드할 때 bss영역에 할당 된 메모리를 초기화 한다.
14. Code(text)영역
실제 프로그램 동작을 수행하는 명령어(Instruction)와 전역 상수가 저장된다.
'JAVA' 카테고리의 다른 글
제어문(feat. 삼항연산자) (1) | 2020.04.28 |
---|---|
별찍기, 구구단, 화폐단위 계산 (1) | 2020.04.28 |
연산자 사용 및 프레임워크, tools, IDE 의 차이점 (1) | 2020.04.28 |
빌드(Build) (1) | 2020.04.28 |
변수, 상수, 연산자, 초기화, 대입, 선언 (0) | 2020.04.28 |