씹어먹는 C++ 3일차
❗참고 : https://modoocode.com/135
C++의 메모리
- Stack
- 지역 변수가 저장됨
- 컴파일러에 의해 어느정도 안정성이 보장됨
- Heap
- 동적 할당 변수
- 프로그램 실행 시에 자유롭게 할당하고 해제할 수 있음
동적 할당
- C에서의 동적 할당
- malloc/calloc/realloc 함수로 메모리 할당, free ()로 메모리 해제
- type의 크기를 명시
- C++에서의 동적 할당
- new와 delete를 이용
#include <iostream>
int main() {
int arr_size;
std::cout << "array size : ";
std::cin >> arr_size;
int *list = new int[array_size];
for (int i = 0 ; i < arr_size ; a++) {
std::cin >> list[i];
}
for (int i = 0 ; i < arr_size ; i++) {
std::cout << i << "th element of list : " << list[i] << std::endl;
}
delete[] list;
return 0;
}
- c++의 변수 범위
- 중괄호 안에서 동일한 이름을 가진 변수를 선언 후 사용시 변수의 scope는 괄호 안 까지
- for 문의 초기식에 선언된 i는 for문 내에서만 사용되면서 소멸함!
- 이전/이후에 사용되는 int i와 다른 변수임
- C와 C++의 차이 (동적 할당)
차이 | C | C++ |
---|---|---|
할당 호출 함수 | malloc, calloc, realloc | new + C 함수들 사용 가능 |
해제 호출 함수 | free | delete |
library | stdlib.h include 필요 | C++ 기본 제공 함수 (별도 library include 불필요) |
반환 값 | ‘void *‘를 반환 (형변환 필요) | 할당하려는 data type의 pointer를 반환 (형변환 불필요) |
할당과 초기화 | 메모리 동적 할당만 가능 | 할당과 동시에 초기화 가능 (int* ptr = new int(10) // 10으로 초기화) |
할당 exp. | int ptr = (int)malloc(sizeof(int)*4); | int *ptr = new int; |
해제 exp. | free(ptr) | delete ptr |