우리 모두 알고 있듯이 .NET에서 정수가 오버플로 될 때마다 IntegerOverflow
예외가 발생합니다. 나는 이것이 아주 좋은 것이라고 생각한다..NET VM이 정수 오버플로를 검사하는 방법은 무엇입니까?
하지만 어떻게하면 이렇게 빨리 만들 수 있을지 궁금합니다. x86은 정수 오버 플로우를 함정에 빠뜨리지 않으며, 다른 아키텍처가 그렇게 할 수 있다면 놀랄 것입니다. 내가 x86에서 찾은 가장 좋은 해결책은 모든 단일 산술 연산 후에 "INTO"명령어를 넣는 것입니다. 그러나 나는 이것이 눈에 띄게 둔화 될 것이라고 생각합니다.
컴파일러에서 정적 검사를 수행하여 오버플로가 될 수없는 경우에이를 방지 할 수 있습니다. 그러나 컴파일러가 작업 결과를 결정할 수 없을 때 성능에 중요한 내부 루프는 어떻게됩니까?
모노 소스를 보려고했지만이 수표를 수행하는 곳을 찾을 수 없었습니다.
누구나 실제로 어떤 일을하는지 알 수 있습니까? 나는 정말로 알고 싶다.
사이드 노트 : .NET JITC가 방출하는 x86 코드를 볼 수있는 방법이 있습니까?
"정수가 넘칠 때마다": IL 명령의 * checked form *을 사용할 때만. 'add'보다는'add.ovf'를 사용하십시오. 확인 된 키워드를 사용하지 않으면 기본적으로 C#이 생성하는 검사되지 않은 지침이 있습니다. C에서 "알고 사랑하는"방식으로 오버플로가됩니다. – itowlson
NGEN에서 원시 이미지 기계 코드 ... http://msdn.microsoft.com/en-us/library/6t9t5wcf%28VS.80%29.aspx –
큰 벌칙이 아닙니다. 오버 플로우 예외가 거의 발생하지 않으면 프로세서는 해당 분기를 올바르게 예측하기 시작하며 루프 성능이 걱정된다고 가정 할 경우 속도가 느려지 게됩니다. – Yuliy