Learning

C++

usefuLake 2023. 3. 24. 10:44

- 홍정모의 따라하며 배우는 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