다음 예제를 고려하십시오.
struct vector {
int size() const;
bool empty() const;
};
bool vector::empty() const
{
return size() == 0;
}
생성 된 어셈블리 코드 vector::empty
(최적화와 함께 clang) :
push rax
call vector::size() const
test eax, eax
sete al
pop rcx
ret
왜 스택 공간을 할당합니까? 전혀 사용되지 않습니다. push
및 pop
생략 할 수있다. 최적화 된 MSVC 및 gcc 빌드는이 기능에 대해 스택 공간을 사용 하므로 ( godbolt 참조 ) 이유가 있어야합니다.
@ 밥 __ : 아니요. 왜 내가해야합니까?
—
Dr. Gut
vector::size()
이 예제에서는 인라인되지 않은 것을 시뮬레이션하기 위해 정의되지 않았습니다.
그렇다면 어떻게 컴파일러가 모르는 것을 최적화 할 수 있을까요?
—
Bob__
@Bob__ :의 구현을 아는 것은에
—
Dr. Gut
vector::size()
대한 스택 프레임 할당 또는 할당과 관련이 없다고 생각 합니다 vector::empty()
. 에서 empty()
가 방금 전화, 그것은 무엇이든.
글쎄, 당신은 무언가 를 반환 하는 함수를 호출하고 있습니다 . 더 잘 알지 못하면 공간이 필요합니다.
—
Bob__
this
매개 변수 를 설명했습니까 ?