1
대부분의 경우 함수를 만들 때 코드를 디버그하기 쉽기 때문에 많은 변수를 만듭니다. (28 바이트는 점을 고려컴파일러 최적화 - 가변 메모리 사용량
void foo(int value) {
int x = value * 1;
int y = value * 2;
int z = value * 3;
int u = x + 1;
int v = y + 2;
int w = z + 3;
}
이 코드는하지만 메모리를 많이 사용 (당신이 무슨 일이 일어나고 있는지 단계별로 볼 수 있습니다) 괜찮 및 디버그에 쉬운 :
내가이 함수가 있다고 가정하자
-
:이를 바탕으로
- 컴파일러는 릴리스 빌드에서 이런 종류의 최적화를 수행합니까?
- 더 많은 레지스터를 사용하지 않도록 함수에서 더 이상 사용되지 않는 변수의 메모리를 다시 사용합니까?
void foo(int value) {
int u = value * 1 + 1;
int v = value * 2 + 2;
int w = value * 3 + 3;
}
나는 몇 가지 질문이있다 : 각 int
)은 4 바이트이며,이 방법으로 최적화 할 수
실제 사례가 더 좋을 수도 있습니다. 이 기능들은 non-ops이며 완벽하게 최적화 될 수 있습니다. 생성 된 어셈블을 항상 검사하여 컴파일러가 코드를 컴파일 한 후 실제로 수행하는지 확인하지는 마십시오. – NathanOliver
함수가 리턴하자마자 28 바이트가 다음 함수 호출을 위해 해제됩니다. 그것들은 단지 스택에 임시 저장되어 있습니다 ("할당"하기에 꽤 싸기도합니다). – Steve
함수의 실행은 해당 함수의 존재 여부에 의존하지 않으므로 대부분 존재하지 않습니다. 또한, 레지스터 할당도 중요합니다. 대부분의 지역 변수는 메모리에 없습니다. – harold