Transcript 메모리 구조와 할당
자료구조 세미나
발표 주제: 자료구조 기초
- 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
- 2회 차: 메모리 구조와 할당 (메모리 구조, 배열, 동적할당)
발표자:
SGA 15기 남궁곤
자료구조 세미나: 자료구조의 기초 (2) _메모리 구조와 할당
메모리 구조 정리
(Memory Structure)
0xFFFF FFFF
32bit 운영체제
0xFFFF FFFF
2Gbyte
공간 설정
(약 21억 개의
주소 공간)
4Gbyte
공간 설정
(약 43억 개의
주소 공간)
0x8000 0000
0x8000 0000
2Gbyte
공간 설정
(약 21억 개의
주소 공간)
0x0000 0000
SGA (Seoul Game Academy) Program-15th Seminar
운영체제를 위해
예약
어플리케이션을
위한 공간
0x0000 0000
NamgungGon_a.k.a torch: email: [email protected]
mobile: 010-9959-9771
자료구조 세미나: 자료구조의 기초 (2) __메모리 구조와 할당
상위 메모리 주소 (0xFFFF)
env / argv 문자열
env / argv 포인터
환경 변수와 명령 창의 데이터 저장
argc
Stack Area
로컬 인자와 프로세스 상태 저장
Heap Area
동적으로 할당된 데이터 저장
Data (.bss)
비 초기화 데이터 영역 (block started by symbol)
Data Area (.data)
Code (.text)
(약 1MB 사용 가능하며, 컴파일러 옵션으로 변경이 가능)
데이터 영역
Text segment
하위 메모리 주소 (0x0000)
SGA (Seoul Game Academy) Program-15th Seminar
NamgungGon_a.k.a torch: email: [email protected]
mobile: 010-9959-9771
자료구조 세미나: 자료구조의 기초 (2) __메모리 구조와 할당
상위 메모리 주소 (0xFFFF)
#include <iostream>
할당되는 영역
int x = 1;
int y;
data (.data)
data (.bss)
void main(void)
{
int i;
stack
static int k;
static int l = 1;
char szBuff[256];
data (.bss)
data (.data)
stack
char *p = new char[10]; heap
}
y = 2;
text
env / argv 문자열
env / argv 포인터
argc
Stack Area
Heap Area
Data Area (.bss)
Data Area (.data)
Code (.text)
하위 메모리 주소 (0x0000)
SGA (Seoul Game Academy) Program-15th Seminar
NamgungGon_a.k.a torch: email: [email protected]
mobile: 010-9959-9771
자료구조 세미나: 자료구조의 기초 (2) __메모리 구조와 할당
할당과 바인딩
(Allocation / Binding)
공간을 요구하는 것을 할당 (Allocation) 이라 하며
공간에 요소를 지정하는 것을 바인딩 (Binding) 이라고 한다
Compile
Time
Run
Time
Static Binding
- 바인딩이 Compile, Link, Load 시간에 이루어짐
Dynamic Binding
- 바인딩이 프로그램 실행 중 그 순간의 상태에 따라 이루어짐
SGA (Seoul Game Academy) Program-15th Seminar
NamgungGon_a.k.a torch: email: [email protected]
mobile: 010-9959-9771
자료구조 세미나: 자료구조의 기초 (2) __메모리 구조와 할당
배열 이란?
(Array)
“동일한 성격의 데이터를 관리하기
쉽도록 하나의 이름으로 묶는 일”
Array[0]; Array[1]; Array[2]; Array[3]; Array[4]; Array[5]; Array[6]; Array[7];
int Array[8];
int
int
int
int
int
int
int
int
“연속된 공간이 할당 되며 인덱스(index)를 통해 개별 접근이 가능”
Caution!
1. 배열의 길이 선언은 Only!!! 상수
2. 배열의 index는 0부터 시작
3. 한번 선언된 배열의 길이는 변경이 불가능
SGA (Seoul Game Academy) Program-15th Seminar
NamgungGon_a.k.a torch: email: [email protected]
mobile: 010-9959-9771
자료구조 세미나: 자료구조의 기초 (2) __메모리 구조와 할당
1차원 배열
int Array[10];
2차원 배열
int Array[2][10];
3차원 배열
int Array[2][2][10];
4차원 배열
int Array[10][10][10][10];
.
.
.
.
Array
Array[0]
Array[1]
Array[0]
Array[1]
Array[0]
Array[1]
“메모리 구조상에는 일렬로 할당된다.”
SGA (Seoul Game Academy) Program-15th Seminar
NamgungGon_a.k.a torch: email: [email protected]
mobile: 010-9959-9771
자료구조 세미나: 자료구조의 기초 (2) __메모리 구조와 할당
배열과 포인트
(Array / Pointer)
“포인터와 배열의 ‘거의’ 유사한 성격을 가지고 있다.’
배열 명
포인터
이름 존재
이름이 존재
이름이 존재
값
메모리의 주소
메모리의 주소
변수 여부
상수
변수
“배열 명은 상수이기 때문에 수식의 좌변에
올 수 없고, 값의 대입이 불가능”
SGA (Seoul Game Academy) Program-15th Seminar
NamgungGon_a.k.a torch: email: [email protected]
mobile: 010-9959-9771
자료구조 세미나: 자료구조의 기초 (2) __메모리 구조와 할당
“Array[i] == *(Array + i).’
“배열과 포인터는 위의 것만 이해하면 끝’
SGA (Seoul Game Academy) Program-15th Seminar
NamgungGon_a.k.a torch: email: [email protected]
mobile: 010-9959-9771
자료구조 세미나: 자료구조의 기초 (2) __메모리 구조와 할당
“포인터 배열과 다중 포인터”
- 포인터를 요소로 가지고 있는 배열
“char
자료형
(*Array)
[4]
포인터
의 의미”
연산단위
void main(void)
{
int array[2][4] = {1, 2, 3, 4, 5, 6, 7, 8};
}
func1(array);
void func1(int (*ptr)[4])
{
for (int I = 0 ; I < 2 ; i++)
{
for (int j = 0 ; j < 4 ; j++)
{
cout << ptr[i][j];
}
cout << endl;
}
}
SGA (Seoul Game Academy) Program-15th Seminar
-> int ptr[][4] 와 같이 선언해도 동일하다
NamgungGon_a.k.a torch: email: [email protected]
mobile: 010-9959-9771
자료구조 세미나: 자료구조의 기초 (2) __메모리 구조와 할당
동적 할당
(Dynamic Allocation)
“Heap의 메모리 할당 및 소멸, Run-Time에 메모리 할당하기’
‘C’ Style!
void main(void)
{
len = 10;
char *str = (char*)malloc(sizeof(char * len)
}
free(str);
- 할당할 대상의 정보를
무조건 바이트 크기단위로 전달
‘C++’ Style!
void main(void)
{
len = 10;
char *str = new char[len]
}
delete []str;
- 그냥 배열과 유사하게 선언
- 반환형이 void 포인터 형이기 때문에
적당한 형으로 형변환이 필요
SGA (Seoul Game Academy) Program-15th Seminar
NamgungGon_a.k.a torch: email: [email protected]
mobile: 010-9959-9771
자료구조 세미나: 자료구조의 기초 (2) __메모리 구조와 할당
“C++에서는 C++ style로 동적할당 하자!“
“C++에서 malloc / free 함수의 호출이 문제가 될 수도 있다.
그리고 어렵다…”
할당
int 형 변수
double 형 변수
길이가 5인 int 형 배열
길이가 10인 double 형 배열
SGA (Seoul Game Academy) Program-15th Seminar
소멸
int *ptr = new int;
delete ptr;
double *ptr = new int;
delete ptr;
int *arr = new int[3]
delete []arr;
double *arr = new double[7]
delete []arr;
NamgungGon_a.k.a torch: email: [email protected]
mobile: 010-9959-9771