Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준
- MFC
- SQLD이론
- sqld
- clean code
- 파이썬
- 게임서버개발
- SW개발자를 위한 성능좋은 SQL
- 역행자
- beautifulsoup
- 알고리즘
- git
- 주석
- 서버최적화
- DP
- 자청
- 오픽
- sqld요약
- 폴링vs이벤트
- Javascript
- 클린 코드
- BFS
- SQLD 이론
- Backtracking
- Python
- 오픽 초보
- 클린코드
- N-Queen
- c++
- 서버아키텍처
Archives
- Today
- Total
가취공부하자
포인터와 동적메모리(간단) 본문
c++ 애플리케이션에서 사용하는 메모리는 크게 스택과 프리스토어( free store) 로 나뉜다.
스택
스택은 함수 호출과 관련된 지역 변수 및 함수를 저장하는 영역이다. 매우 빠르며, LIFO(Last In, First Out) 방식으로 작동한다.
스택에 할당된 변수는 프로그래머가 직접 할당 해제할 필요없이 자동으로 처리된다.
프리스토어
일반적으로 힙(Heap)이라고도 불리며, 동적 메모리 할당에 사용된다. 함수가 끝난 후에도 그 안에서 사용하던 변수를 계속 유지하고 싶다면 프리스토어에 저장한다.
프리스토에 할당된 메모리 공간은 개발자가 직접 할당과 해제를 관리한다.
포인터
메모리 공간을 적당히 할당하기만 하면, 어떤 값이라도 프리스토어 저장할수 있다.
메모리 공간을 할당할때는 포인터를 선언한다.
int* myIntegerPointer;
별표(*)는 정수타입에 대한 메모리 공간을 가리킨다는 것을 의미한다.
포인터 변수는 항상 선언하자마자 초기화 한다. 위와 같은 코드는 오류
int* myIntergerPointer {nullptr};
당장 할당하지 않는다면 널 포인터(nullptr)로 초기화 한다.
이미 선언된 포인터 변수에 동적으로 메모리 할당할때, 아래와 같이 작성하면 정수값 하나에 대한 메모리 주소를 가리킨다.
myIntegerPointer = new int;
포인터가 가리키는 값에 접근하기 위해선 역참조(참조 해제)해야한다. 프리스토어에 있는 값을 가리키는 화살표를 따라간다.
*myIntegerPointer = 8;
구조체의 포인터를 다루는 방법은
*연산자로 역참조해서 구조체 자체에 접근한뒤, 연산자로 표기하는 방법이 있고
Employee* anEmployee {getEmployee()};
cout << (*anEmplyee).salary<< endl;
-> (화살표) 연산자를 사용하는 방법이 있다.
Employee* anEmployee {getEmplyee()};
cout << anEmployee->salary << endl;
메모리해제시에는 아래와 같이 작성한다.
delete myIntegerPointer;
myIntegerPointer = nullptr;
동적으로 배열 할당
// 동적으로 메모리 할당
int arraySize {8};
int* myVariableSizeArray{new int[arraySize]};
// 메모리 해제
delete[] myVariableSizeArray;
myVariableSizeArray = nullptr;
'c++' 카테고리의 다른 글
랜덤함수 rand(), srand() 차이 (0) | 2024.08.24 |
---|---|
[c++] reference 변수 (참조형 변수) (0) | 2022.12.04 |
[c++] 함수 템플릿(template) (0) | 2022.12.04 |
[ c++] 인라인 함수 (inline function) (0) | 2022.10.31 |
[c++] namespace (0) | 2022.10.31 |