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