본문 바로가기

Language

(107)
[C++] 동적 할당 프로그램이 실행되는 런타임동안 사용자가 직접 공간의 크기나 시점을 결정하여 힙 영역의 메모리를 할당 받는것을 동적할당 이라고 한다. 사용자에 의해 메모리가 동적으로 할당이 되면 프로그램이 끝날 때 까지 유지되므로, 메모리 공간 사용이 끝나면 메모리 낭비(누수)를 줄이기 위해 명시적으로 메모리 할당을 해제 해주어야한다. 지금껏 사용하던 지역변수나 매개변수는 정적할당으로 스택영역에 메모리가 할당되어 왔는대 스택영역의 경우 메모리가 작은 크기로 제한되어 있기 때문에 그래픽 같이 용량이 큰 데이터를 저장할 경우 오버플로우의 발생으로 프로그램이 동작하지 않을 가능성이 크다. 따라서 동적할당을 이용하여 운영체제에서 관리하는 좀 더 큰 메모리 영역인 힙을 통해 정적할당의 단점을 극복 할 수있다. C 언어에서는 힙 상..
[C++] 참조자(레퍼런스) C언어에서 어떤 변수를 가리키고 싶을 때 반드시 포인터를 사용해야는데 C++에서는 다른 변수나 상수를 가리키는 방법으로 또 다른 방식을 제공한다. 이를 참조자(레퍼런스)라고 부른다. 참조자를 정의하는 방법은, 가리키고자 하는 타입 뒤에 &를 붙이면 된다. int& another_a = a; 위처럼 int형 변수의 참조자를 만들고 싶을 때는 int&를, double의 참조자를 만들고 싶을 때는 double&로 하면 된다. 심지어 int* 와 같은 포인터 타입의 참조자를 만들려면 int*&로 쓰면 된다. 위와 같이 선언함으로써 another_a는 a의 참조자가 되었다. 즉, another_a는 a의 또 다른 이름이라고 컴파일러에게 알려주는 것이다. 따라서 another_a에 어떤 작업을 수행하든 사실상 a에..
[C++] 포인터 포인터를 이해하기에 앞서 모든 데이터들은 메모리 상에 특정한 공간에 저장되어 있다. 편의상 메모리의 특정한 공간을 '방'이라고 하겠다. 각 방에 데이터들이 들어가게 되는 것이다. 한 방의 크기는 보통 1바이트라고 정의된다. 만약 4바이트짜리 int형 변수를 정의한다면 메모리 상의 4칸을 차지하게 된다. 프로그램 작동 시 컴퓨터는 여러 방들에 있는 데이터들을 필요로 한다. 따라서, 어떤 방에서 데이터를 가져올지 구분하기 위해 각 방에 고유의 주소를 붙여주었다. 예를 들어 아래와 같은 int 변수 a를 정의하였다면 특정한 방에 아래 그림처럼 변수 a가 정의된다. int a = 123; 0x152839는 이 방의 시작 주소이다. 16진수로 152839라는 위치에서부터 4바이트 공간을 차지하며 123이라는 값이..