C++
1979년 Bell Labs에서 Bjarne Stroustrup이 C 언어를 기반으로 *객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 개념과 *제네릭 프로그래밍, *예외 처리, *RAII 등의 다양한 기능을 추가한 프로그래밍 언어
- 객체 지향 프로그래밍 : 데이터와 이를 처리하는 함수를 하나의 객체로 묶어 프로그램을 구성하는 방식
- 제네릭 프로그래밍(Template) : 자료형에 의존하지 않는 일반화된 코드를 작성하여 다양한 자료형에서 재사용할 수 있도록 하는 프로그래밍 패러다임
- 예외 처리(Exception Handling) : 프로그램 실행 중 발생할 수 있는 오류(예외 상황)를 감지하고 처리하는 메커니즘
- RAII(Resource Acquisition Is Initialization) : 자원 획득 시 초기화라는 개념으로 객체가 생성될 때 필요한 자원을 획득하고 객체가 소멸될 때 자원을 반납하도록 함으로써 자원 누수를 방지하는 C++의 핵심 메커니즘
프로그램 실행 과정 차이
운영체제(OS)는 프로그램을 실행시키는 역할을 한다. 프로세스를 생성하고 메모리를 할당하며 CPU에 실행 명령을 내린다.
- C++ 프로그램
- C++은 일반적으로 네이티브 코드(기계어)로 컴파일
- 컴파일된 실행 파일은 중간 단계 없이 운영체제가 직접 실행할 수 있음(운영체제 > 프로그램)
- 메모리 관리를 직접 할 수 있음
- C# 및 Java 프로그램
- 해당 언어는 네이티브 코드로 바로 컴파일되지 않고 바이트코드(Bytecode) 형태로 컴파일
- 바이트코드는 운영체제가 직접 실행할 수 없어 가상머신(VM, Virtual Machine)이 실행
- C# : .NET의 CLR(Common Language Runtime)
- Java : JVM(Java Virtual Machine)
- 가상머신 자체는 네이티브 코드로 만들어졌기 때문에 운영체제가 가상머신을 실행하고 가상머신이 프로그램을 실행하는 구조(운영체제 > 가상머신 > 프로그램)

요약
- C++는 컴파일된 기계어 파일을 운영체제가 직접 실행
- C# 및 Java는 운영체제가 가상머신을 실행 > 가상머신이 바이트코드 실행
- C++는 메모리를 직접 관리해야 되는 어려움이 있지만 최고의 효율을 얻을 수 있음