>백엔드 개발 >C++ >컴파일러는 C에서 '새로운' 호출을 최적화할 수 있습니까?

컴파일러는 C에서 '새로운' 호출을 최적화할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-02 00:19:15786검색

Can Compilers Optimize Away `new` Calls in C  ?

컴파일러가 힙 메모리 할당을 제거할 수 있나요?

C에서는 new 연산자를 사용하여 힙에 메모리를 할당합니다. 컴파일러는 불필요한 문을 제거하는 등 코드를 최적화할 수 있습니다. 컴파일러가 new를 사용하여 생성된 힙 메모리 할당을 제거할 수 있습니까?

컴파일러 동작

연구에 따르면 컴파일러마다 힙 할당을 다르게 처리하는 것으로 나타났습니다.

  • g (5.2.0) 및 Visual Studio 2015는 새로운 기능을 최적화하지 않습니다. call.
  • clang(3.0)은 전체 최적화 플래그가 있어도 새 호출을 최적화합니다.

최적화 유효성

유효성 컴파일러 최적화는 논쟁의 대상입니다. 일부에서는 관찰 가능한 동작(예: 예외 발생)이 있을 수 있으므로 컴파일러가 새 호출을 최적화하는 것이 허용되지 않는다고 주장합니다. 다른 사람들은 컴파일러가 관찰 가능한 동작이 영향을 받지 않는다고 보장할 수 있는 경우 새 호출을 최적화하는 것이 허용된다고 주장합니다.

C 14 Standard

N3664: Clarifying Memory Allocation에서 컴파일러 최적화 및 메모리 할당에 관한 규칙. 이를 통해 컴파일러는 특정 시나리오에서 메모리 할당을 최적화할 수 있습니다. 그러나 이 조항은 인과관계를 위반할 가능성이 있다는 비판을 받았습니다.

추가 고려사항

  • 비투입 신규: Clang도 최적화합니다. 던지지 않는 새 항목에 대한 호출 연산자.
  • 재정의된 연산자 new: 다양한 번역 단위의 사용자 정의 전역 연산자 new 구현은 힙 할당과 관련된 컴파일러 최적화의 유효성에 영향을 미칠 수 있습니다.

결론

힙 메모리 할당을 최적화하는 컴파일러의 기능은 복잡한 문제입니다. 컴파일러 동작, 언어 표준 및 잠재적인 예외가 포함됩니다. 일부 컴파일러는 N3664를 기반으로 이 최적화를 구현하지만 그 유효성은 여전히 ​​논의 주제로 남아 있으며 C 표준 및 사용자 정의 메모리 할당자의 존재 여부를 포함한 특정 상황에 따라 달라집니다.

위 내용은 컴파일러는 C에서 '새로운' 호출을 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.