델파이 언어 최적화
1) 레코드 또는 배열형의 반환값
C++ 프로그래머는 반환 값이 스택에 푸시되어 시간과 공간 효율성이 모두 향상되므로 이 작업을 수행하지 않습니다. Delphi에는 이 문제가 없습니다. 반환 값은 Out 매개 변수와 동일하며 호출자는 메모리 단위 포인터를 전달합니다. 따라서 레코드나 배열의 반환값을 사용하면 표현식 작성 시 가독성과 편의성을 높일 수 있습니다.
2) 공개적 표현
Delphi는 명령문 라인 내의 일반적인 표현식만 추출합니다. 공통 표현식에 함수 호출이나 속성 액세스가 포함되어 있으면 추출되지 않습니다. 즉, 추출로 인해 의미가 변경될 수 있으므로 두 번 평가됩니다.
3) const 매개변수
함수 매개변수가 변경되지 않은 경우 매개변수 길이가 4바이트를 초과하거나 인터페이스, 문자열 또는 동적 배열 유형인 경우 const 매개변수를 사용하면 컴파일러가 참조 기술을 수정하지 않고 주소 모드에서 이를 전달할 수 있습니다.
4) 긴축
델파이는 스토리지 유닛을 할당할 때 가능한 한 작은 공간을 할당합니다. 충분히 작고 레지스터에 들어갈 수 있는 경우 레지스터를 사용한 직접 작업이 일반적으로 사용됩니다. 예를 들어 길이가 4바이트인 레코드나 데이터를 할당하면 컴파일러는 DWord에 따라 자동으로 32비트 레지스터를 사용합니다.
5) 운영자
2나 4로 나누는 것은 오른쪽 쉬프트에 최적화되고, 2나 4를 곱하는 것은 왼쪽 쉬프트에 최적화되므로 특별히 쉬프트 연산을 사용할 필요가 없고, 더 읽기 쉬운 코드를 작성할 수 있습니다. 그러나 8의 곱셈과 나눗셈 및 기타 2의 배수에는 이러한 최적화가 적용되지 않습니다.
i := i + 1; 및 Inc(i);는 일반적으로 동일한 코드를 생성합니다.
6) 부동소수점
Delphi는 부동 소수점 계산을 최적화하지 않으며 0 연산을 추가해도 최적화되지 않으며 많은 FWAIT 명령이 추가됩니다. 따라서 주요 부동 소수점 연산을 작성할 때는 표현식을 직접 최적화하고 일반적인 표현식을 직접 추출해야 합니다. 부동 소수점 변수는 최적화되지 않고 나중에 사용되지 않더라도 메모리에 다시 기록되므로 중간 변수를 가능한 한 적게 사용하십시오. 필요한 경우 어셈블리를 사용하거나 C 사용을 고려하세요. 그럼에도 불구하고 일반적으로 동등한 Delphi와 C 부동 소수점 프로그램 사이에는 성능에 큰 차이가 없습니다.
7) 진술 포함
with는 반복 계산을 피하기 위해 암시적 중간 변수를 생성할 수 있습니다.
8) 수집
[0..31]의 i는 (i >= 0) 및 (i <= 31)보다 빠릅니다.
9) 비트 폭
압축을 사용하지 않는 경우에는 바이트가 정렬될 때 SmallInt, ShortInt, Byte 등도 4바이트 또는 8바이트를 차지하므로 정수와 카디널을 사용합니다. 계산에서는 여전히 32비트이므로 먼저 32비트로 확장해야 합니다.