내가빈 클래스의 생성자를 호출하면 실제로 메모리가 사용됩니까?
class Empty{
Empty(int a){ cout << a; }
}
같은 클래스가 그리고 나는 그것이
int main(){
Empty(2);
return 0;
}
를 사용하여 호출 가정 윌 어떤 메모리는 "빈"객체의 생성에 대한 스택에 할당되는이 원인? 분명히 인수를 스택에 푸시해야하지만 추가 오버 헤드가 발생하지는 않습니다. 기본적으로 정적 멤버로 생성자를 사용하고 있습니다.
내가 이것을하고 싶은 이유는 템플릿 때문입니다. T
의 유형을 지정하지 않아도 동안 나를, 그래서 하나 개의 템플릿 매개 변수를 전문으로 얻을
int main(){
int a = 1;
FuncName<1>(a);
}
같은 것을 쓸 수있는
template <int which>
class FuncName{
template <class T>
FuncName(const T &value){
if(which == 1){
// specific behavior
}else if(which == 2){
// other specific behavior
}
}
};
처럼 실제 코드가 보인다. 또한, 나는 컴파일러가 생성자 안에서 다른 브랜치들을 최적화 할 수 있기를 바라고있다. 이것이 사실인지 또는 확인하는 방법을 아는 사람이라면 크게 환영 할 것입니다. 상황에 템플릿을 던지더라도 위에서 "빈 클래스"문제가 변경되지 않는다고 가정했습니다. 맞습니까?
질문은 당신이 신경 쓰는 이유입니다.최상의 코드를 관리하고 생성하는 것은 컴파일러의 임무입니다. 가장 표현이 풍부한 코드를 작성하는 데 집중해야합니다. –
추 신 : 인수가 스택에 푸시 될 필요는 없습니다. C++ ABI는 정의되지 않았기 때문에 컴파일러가 레지스터를 사용하여 매개 변수를 전달하는 작업을 수행하면 코드가 더 효과적입니다. –
내가 얻을 수있는 최고의 성능을 원하기 때문에 신경 쓰지 않습니다. 나는 코드가 우아하고 이러한 것들에 대해 걱정하지 않아야한다는 태도를 정말로 싫어한다. 때로는 이러한 것들이 중요합니다 (고성능 컴퓨팅을 수행함). –