가능한 중복 :
What’s the difference between passing by reference vs. passing by value?by-value의 메모리 소비가 param을 통과했습니다. 참조에 의한
나는 내 매우 구체적인 질문 (다른 스레드에 나와 있지 않은 것을 믿고, 제목이 다른 많은 대답 질문을 나타낼 수 있다는 사실을 알고 나는 그것이 중복되면 미안하다.) 사업
: 고려 다음 서명 :
A :
void MyFunction(long int x);
B :
void MyFunction(long int & x);
하고 다음 사용 :
void main()
{
short int y = 0;
MyFunction(y);
...
}
내 질문은 관련이 파의 메모리 소비 MyFunction의 메모리 스택 프레임에 ameter. 사례 A의
이 파라미터 값에 의해 전달되고, 그것은를 sizeof (짧은 INT) 바이트를 소모 할 것이다 것일까? 짧은 INT보다 아마 인 - 케이스 B에서는
- 에서, 파라미터는 상기 컴파일러가 포인터를 구현한다고 가정 의해 참조 전달되고, 그것은를 sizeof를 소비한다 ( POINTER_TYPE)를 바이트 의미 하는가? 는 내가 어떤 효과를 가지고 있는지 알고 싶습니다 함수가 long int와 유형을 수신
주 (I 번 참조를 사용하는 경우는 플랫폼에 따라, 어쨌든 64 개 비트를 소모 할 수 있다는 말을 들었다) 두 경우 모두.
또 다른 작은 질문 - 누구든지 컴파일러가 포인터를 사용하여 매개 변수 전달 매개 변수를 구현하지 못하는 예제를 게시 할 수 있습니까?
감사합니다. Asaf.
마지막 질문에 대한 답변으로 인라인이 마음에 듭니다. –
@KerrekSB, 일단 인라이닝이 완료되면 아무런 문제가 없습니다. 또한 항상 적용 할 수는 없습니다. 예 : '가상'/ 재귀 적/큰 기능. OP는 인라이닝 이외의 경우에 더 관심이 있다고 생각합니다. – iammilind
흥미로운 질문입니다. 그것은 많은 것들에 달려 있습니다. 컴파일러가 생성 한 어셈블리 코드를 살펴 봐야합니다. 그러나 그것은 정말로 중요합니까? 물체가 큰 경우 <64bit는 참조로 전달하고, 같거나 작은 경우 값으로 전달합니다. 어쨌든 64 비트가 다 소모되었다고 가정하십시오. 정수는 어쨌든 (전체 레지스터 크기) CPU 단어로 처리되기 때문에 char도 인수로 64 비트를 차지할 수 있습니다. – rioki