- 홍정모의 따라하며 배우는 C++
함수를 만들어서 사용할 때, 메모리는 어떻게 쓰일까?
그냥 봤을 때에는 변수를 함수의 parameter로 받아서 가져올 때 그대로 값을 쓰는 것처럼 보인다.
하지만 주소값을 들여다 보면, 실제로 parameter로 받아온 변수는 다시 선언이 되고,
argument로 들어온 변수에 들어있는 값이 재선언된 변수에 복사 되는 형태이다.
메모리 1개만 쓰면 될 것을 2개 쓴다고 볼 수 있다.
<CODE>
변수 a와 b를 더하는 간단한 함수 구현
#include <iostream>
using namespace std;
int add(int a, int b)
{
cout << "addr of func a : " << &a << endl;
cout << "addr of func b : " << &b << endl;
return a + b;
}
int main()
{
int a = 0;
int b = 1;
cout << "addr of main a : " << &a << endl;
cout << "addr of main b : " << &b << endl;
add(a, b);
return 0;
}
<RESULT>
addr of main a : 00F6FE00
addr of main b : 00F6FDF4
addr of func a : 00F6FD1C
addr of func b : 00F6FD20
main과 function 내에서 쓰이는 변수의 주소가 다르다.
이렇게 불필요한 메모리 사용을 줄이려면 어떻게 할까..?
C++에서 reference를 사용한다.
<CODE> w/ reference
add 함수의 parameter인 a, b의 앞에 &(apmersand)를 붙여 reference를 활용하면
불필요한 메모리 사용을 줄일 수 있다.
#include <iostream>
using namespace std;
int add(int& a, int& b)
{
cout << "addr of func a : " << &a << endl;
cout << "addr of func b : " << &b << endl;
return a + b;
}
int main()
{
int a = 0;
int b = 1;
cout << "addr of main a : " << &a << endl;
cout << "addr of main b : " << &b << endl;
add(a, b);
return 0;
}
<RESULT>
addr of main a : 00EFF758
addr of main b : 00EFF74C
addr of func a : 00EFF758
addr of func b : 00EFF74C