C# 및 C의 휘발성 차이점은 무엇입니까? 나는 한 인터뷰에서이 질문을 받았다.C# 및 C의 휘발성 차이
12
A
답변
16
The article mentioned in this blog post Herb Sutter가 간결하고 명확하게 설명하고 C, C++, Java 및 C#의 휘발성의 사용법과 의미를 비교합니다.
- How to illustrate usage of volatile keyword in C#
- Usage of volatile specifier in C/C++/Java
- What is the “volatile” keyword used for?
- c++ volatile multithreading variables
- volatile and multithreading?
- Why is volatile needed in c? 01 :
또한이 매우 사이트 좋은 질문과 답변의 몇 가지가 있습니다
EDIT : 초기 링크 (Herb Sutter의 블로그 링크)에 언급 된 DDJ 기사에 "exact link"이라고 혼동하지 마십시오.
또한 Nigel Jones의 this article은 embedded C 프로그래밍의 맥락에서 volatile 키워드를 설명합니다. 이 질문은 인터뷰에서 같은 저자가 작성한 this other article이 팝업창으로 나타나서 내 즐겨 찾기 ("exact link") 중 하나이며 C 세계에서 휘발성에 대한 또 다른 좋은 설명이 있습니다.
int running = 1;
void run() {
while (running) {
// Do something, but 'running' is not used at all within the loop.
}
}
는 일반적으로 컴파일러가 번역 할 수있다 '동안 (달리기)'단지 '동안 (1)'이 경우 : 휘발성 C에서
2
변수에 대한 액세스를 최적화하지 않도록 컴파일러를 알려줍니다. 'running'변수가 volatile로 표시되면 컴파일러는 매번 변수를 확인해야합니다.
C '휘발성'은 하드웨어 (예 : CPU 캐시, 명령 파이프 라인 등)가 여전히 메모리 액세스를 재정렬하는 동안 컴파일러를 최적화하는 것을 제한한다는 것을 이해하는 것이 중요합니다. C 컴파일러가 하드웨어를 최적화하지 말라고 알리는 방법은 없습니다. 스스로를해야합니다 (예 : 메모리 장벽 사용). 당신은 휘발성 변수에 작성하는 경우
- ,이 보장됩니다 모든 메모리는 것을 액세스하는 :는
는 지금까지 내가 (하지만 난 완전히 확실하지 않다) 알고있는 C#을 사양은 조금 더이 소요 그것이 완료되기 전에해라.
- 휘발성 변수를 읽으면 휘발성 변수의 읽기가 완료되기 전에 완료되지 않은 모든 메모리 액세스가 완료된다는 것을 보장합니다.
관련 문제
- 1. C의 가운데 차이 근사법
- 2. 연동 및 휘발성
- 3. 객체 C의 MD5 및 C#
- 4. 휘발성 구조 의미
- 5. C에서 휘발성
- 6. 휘발성 변수
- 7. 휘발성 배열 ++
- 8. 휘발성 키워드
- 9. C++ 포함 및 가져 오기 차이
- 10. 동작 차이 (GCC 및 Visual C++)
- 11. Objective-C의 함수 이름 앞에 "+"와 "-"의 차이
- 12. 차이
- 13. C# 및 Objective C의 문자열 암호화
- 14. C++ 및 C의 가변 매개 변수 목록
- 15. C : 함수에 대한 휘발성 포인터 선언
- 16. PHP와 C의 가변 범위 차이 : 블록 범위가 정확히 동일하지 않습니까?
- 17. 차이 []
- 18. C의 포인터 및 주소
- 19. 휘발성 및 멀티 스레딩? 다음 코드에서
- 20. ASP.NET/C# 이벤트 차이
- 21. C++ 포인터의 차이 ->
- 22. C++ STL 세트 차이
- 23. 가상 차이 구문 C++
- 24. 는 다음 싱글 가정 휘발성 클래스 보증 휘발성 클래스 변수
- 25. std :: C의 대안 C
- 26. 차이
- 27. Objective-C의 점 표기법과 메서드 호출의 성능 차이
- 28. 차이
- 29. 차이
- 30. 차이
귀하의 링크를 따라 차이가 없습니다. –
@Luis Filipe 정확히 이해하지 못 했습니까? C/C++에서는 "비정상적인 메모리 의미"(HW 레지스터, 하나 이상의 주소에서의 메모리 설명)에 사용되는 반면 Java/.NET (C#)에서는 volatile free가 잠금없는 프로그래밍에 사용됩니다. – celavek
실제 ddj 문서를 따라야합니다. 연결하기가 쉬운 지 (광고) 모르겠다. –