C는 C ++보다 훨씬 빠릅니다.
내가 이해하는 한 모든 스크립팅 언어와 핵심 과학 프로그램은 일반적으로 C로 작성됩니다. 이것은 구현을 지저분하지만 요점으로 곧바로 렌더링합니다.
나는이 사람들이 성능을 극대화하고 싶어하지만 C 문자열과 C 구조를 사용하는 것과 C ++ 클래스를 사용하는 것 사이에 실제 차이가 있다는 것을 이해합니다. C ++는 가상 함수를 제외하고 동일한 방식으로 작동하는 것처럼 보입니다. 클래스 함수를 한 번 저장하고 해당 클래스의 모든 인스턴스가 해당 함수를 호출합니다.
C를 더 빠르게 만드는 것은 무엇이며, 가장 빨라야하는 python 또는 sqlite와 같은 프로젝트에서 주목할만한 차이점은 무엇입니까?
C ++는 종종 과학 프로그램에 사용됩니다. C의 인기는 그 영역에서 줄어들 수 있습니다. Fortran은 "저수준"언어로 여전히 인기가 있습니다.
C ++에서는 "사용한만큼만 지불합니다." 따라서 C보다 느리게 만들 수있는 것은 없습니다. 특히 과학 프로그램의 경우 표현식 템플릿을 사용하면 템플릿 엔진을 사용하여 프로그램 의미를 처리하는 사용자 지정 최적화를 수행 할 수 있습니다.
Python과 같은 프로젝트에 C가 선택된 이유는 많은 사람들이 (상대적으로) 완전히 이해하기 때문입니다. 따라서 대규모 코드베이스는 많은 기여자 풀을 혼동하지 않을 것입니다.
SQLite는 작은 실행 코드 크기에 대한 요구 사항이 있으며 C에는 약간의 우위가 있습니다. C ++를 현명하게 사용하면 여전히 임베디드 애플리케이션에서 사용할 수 있지만 원하지 않는 언어 기능이 들어올 것이라는 두려움 때문에 덜 인기가 있습니다.
나는 그 이유가 상호 운용성만큼 성능과 많이 관련이 있다고 생각하지 않습니다. C ++ 언어는 C 언어보다 더 복잡하지만 성능 측면에서 어느 쪽이든 눈에 띄는 차이가 있어서는 안됩니다. 일부 C ++ 구문은 C에 해당하는 std::sort
것보다 빠르며 (보다 빠름 qsort
) 다른 방법에 대한 좋은 예가있을 수 있습니다.
편집 : 상호 운용성 측면에서 ...
기본적으로 C ++ 표준은 다른 컴파일러 / 버전으로 생성 된 바이너리 간의 쉬운 상호 운용성을 위해 필요할 수있는 몇 가지 사항을 정의하지 않습니다. 여기서 가장 주목할만한 문제는 바이너리의 기호에 대한 명명 규칙입니다. C에서 언어는 코드의 각 기호에서 이진 기호 이름으로의 단일 매핑을 정의합니다. 호출 된 함수는라는 my_function
바이너리에 기호를 생성합니다 my_function
. 반면에 함수 오버로딩과 같은 기능으로 인해 C ++ 함수의 이름을 엉망 으로 만들어야합니다.(이진의 다른 함수 기호로 변환되어 인수 및 반환 유형의 유형을 인코딩) 표준은 맹 글링이 수행되는 방법을 정의하지 않습니다. 이는 C ++의 동일한 함수가 컴파일러에 따라 다른 기호로 컴파일 될 수 있음을 의미합니다 ( extern "C"
C ++에서 해당 함수에 대해 C 상호 운용성을 강제하는 데 사용 되지 않는 한 ).
결국, 스크립팅 언어와 네이티브 코드 간의 인터페이스는 내부적으로 구현되는 방법에 대한 세부 정보가 C / C ++ / 다른 네이티브 언어 일 수 있더라도 어쨌든 C 인터페이스 여야합니다.
(저는 의도적으로 언어 전쟁에 뛰어 들고 싶지 않습니다. C ++는 정말 강력하지만 C보다 훨씬 더 복잡한 언어이기 때문에 약간 무섭고 단순 해 보이는 것들이 영향을 미칠 수 있습니다. 공연)
Bjarne이 [D & E]에서 언급했듯이 효율성은 C ++의 주요 목표 중 하나입니다. 따라서 C ++는 프로그래머가 언급 한 가상 기능, rtt 정보 등과 같은 "추가"기능을 사용할 때만 느려집니다.
그래서 저는 그것이 더 심리적 인 이유라고 생각합니다. C는 "느린"C ++ 기능을 허용하지 않기 때문에 사용됩니다.
언어는 본질적으로 더 빠르거나 느리지 않으며 인터프리터와 컴파일러는 다소 효율적일 수 있습니다.
그 외에도 높은 수준의 언어는 일반적으로 런타임 비용이 드는 추상화 계층을 제공합니다. 만약 당신이 그것들을 사용하지 않는다면, 컴파일러는 그것들을 제거 할 수있을만큼 똑똑 할 수도 있지만, 언어의 의미론이 그것을 안전하게 할 수 없다면 불가능할 수도 있습니다. 그리고 그것들이 필요하다면 스스로 구현하십시오. 낮은 수준의 언어는 "느린"언어를 사용하는 것보다 느릴 것입니다.
참고 URL : https://stackoverflow.com/questions/6955114/is-c-notably-faster-than-c
'IT박스' 카테고리의 다른 글
하나의 메이븐 프로필이 다른 프로필을 활성화하도록 할 수 있습니까? (0) | 2020.11.12 |
---|---|
런타임에 Java 주석 추가 (0) | 2020.11.12 |
MySQL TEXT vs BLOB vs CLOB (0) | 2020.11.12 |
GNU는 공백이있는 파일 이름을 처리 할 수 있습니까? (0) | 2020.11.12 |
std :: vector 및 std :: array에 대한 C ++ initializer_list 동작이 다른 이유는 무엇입니까? (0) | 2020.11.12 |