"런타임"이란 무엇입니까?


403

"C 런타임", "Visual C ++ 2008 런타임", ".NET 공용 언어 런타임"등과 같은 것들에 대해 들었습니다.

  • " 런타임 "이란 정확히 무엇입니까?
  • 무엇으로 만들어져 있나?
  • 코드와 어떻게 상호 작용합니까? 아니면 더 정확하게, 내 코드는 어떻게 제어됩니까?

Linux에서 어셈블리 언어를 코딩 할 때 INT 명령을 사용하여 시스템을 호출 할 수 있습니다. 그렇다면 런타임은 저수준 기능을 더 추상적이고 고수준 기능으로 감싸는 사전 제작 된 기능 들일 뿐입니 까? 그러나 이것은 런타임이 아닌 라이브러리에 대한 정의처럼 보이지 않습니까?

"런타임"과 " 런타임 라이브러리 "는 서로 다른 두 가지입니까?

추가 1

요즘 런타임 에는 JVM과 같은 소위 Virtual Machine 과 공통점이 있다고 생각 합니다. 그러한 생각으로 이어지는 인용문은 다음과 같습니다.

이 컴파일 프로세스는 여러 계층의 추상화로 나눌 수있을 정도로 복잡하며 일반적으로 컴파일러, 가상 머신 구현 및 어셈블러의 세 가지 변환기가 필요합니다. --- 컴퓨팅 시스템의 요소 (소개, 하드웨어 랜드로 향하는 길)

추가 2

Expert C Programming : Deep C Secrets 책 . 6 장 런타임 데이터 구조는이 질문에 대한 유용한 참고 자료입니다.


런타임에는 runtime library제어 코드와 상태 (OS에서 제공)가 포함됩니다.
Martin York

43
좋은 질문은 항상 이것에 의문을 제기했습니다.
contactmatt

INT 함수를 호출하지 않습니다. 자세한 내용은 stackoverflow.com/questions/1817577/… 를 참조 하십시오.
Koray Tugay

2
자매 사이트에서 유용한 다른 게시물을 찾았습니다. programmers.stackexchange.com/questions/294346/…
CloudyTrees

나는 항상 저수준 인프라에 샌드 박스와 같은 것입니다. Unix 키트의 작업 관리자 / 또는 프로세스, 모든 하위 수준 GUI 라이브러리 등이 있습니다. 런타임의 일부입니다. 사물이 세워지는 기초.
JGFMK

답변:


262

런타임은 프로그램이 실행 되는 동안 실행 되는 소프트웨어 / 명령 , 특히 명시 적으로 작성하지 않았지만 코드를 올바르게 실행하는 데 필요한 명령을 설명합니다.

C와 같은 저수준 언어는 런타임이 매우 작습니다 (있는 경우). 동적 메시지 전달을 허용하는 Objective-C와 같은보다 복잡한 언어는 훨씬 더 광범위한 런타임을 갖습니다.

런타임 코드는 라이브러리 코드이지만 라이브러리 코드는 더 일반적인 용어이며 모든 라이브러리에서 생성 된 코드를 설명합니다 . 런타임 코드는 특히 언어 자체의 기능을 구현하는 데 필요한 코드입니다.


103

런타임은 코드가 실행되는 모든 라이브러리, 프레임 워크 또는 플랫폼을 나타내는 일반적인 용어입니다.

C 및 C ++ 런타임은 함수의 모음입니다.

.NET 런타임에는 중간 언어 인터프리터, 가비지 수집기 등이 포함되어 있습니다.


4
C ++ 표준 라이브러리는 함수를 포함 할뿐만 아니라 Matt Ball을 참조하며, C 및 C ++ "런타임"은 런타임 라이브러리이고 .NET 런타임은 런타임 라이브러리 및 런타임 시스템입니다.
smerlin

1
내 질문은 정적 라이브러리도 런타임입니까? 이 용어는 주로 공유 객체에 사용되는 것 같습니다. 리눅스에서 libc를 고려하십시오. 그리고 플랫폼과 프레임 워크는 어떻습니까? 그들도 도서관으로 분류되어 있습니까?
Amir Zadeh

3
하지만 어떻게 내 코드가 실제로 실행 있는 " 라이브러리, 프레임 워크, 또는 플랫폼 "? CPU 또는 다른 처리 장치에서 실행해야합니다. 보다 명확한 설명을 위해 추가 세부 정보를 제공 할 수 있습니까?
n611x007

C 및 C ++ 런타임은 함수의 모음입니다. -> 어떤 기능?
Koray Tugay

3
@KorayTugay : cout또는 표준 라이브러리의 함수입니다 printf.
SLaks

80

Wikipedia에 따라 : 런타임 라이브러리 / 런타임 시스템 .

컴퓨터 프로그래밍에서 런타임 라이브러리는 컴퓨터 프로그램의 런타임 (실행) 동안 프로그래밍 언어에 내장 된 기능을 구현하기 위해 컴파일러가 사용하는 특수 프로그램 라이브러리입니다. 여기에는 종종 입출력 및 메모리 관리 기능이 포함됩니다.


런타임 시스템 (런타임 시스템 또는 런타임이라고도 함)은 일부 컴퓨터 언어로 작성된 컴퓨터 프로그램의 실행을 지원하도록 설계된 소프트웨어입니다. 런타임 시스템에는 기본 하위 수준 명령의 구현이 포함되어 있으며 고급 명령도 구현할 수 있으며 형식 검사, 디버깅 및 코드 생성 및 최적화까지 지원할 수 있습니다. 런타임 시스템의 일부 서비스는 응용 프로그램 프로그래밍 인터페이스를 통해 프로그래머가 액세스 할 수 있지만 다른 서비스 (예 : 작업 예약 및 리소스 관리)에는 액세스 할 수 없습니다.


다시 : 당신의 편집 , "런타임"과 "런타임 라이브러리"는 같은 것에 대한 두 개의 다른 이름입니다.


69
Wikipedia는 좋은 인용구가 아닙니다. 신뢰할 수있는 출처를 찾기 시작하기에 좋은 위치이지만, 그 자체로 권위있는 것으로 간주해서는 안되며 인용문을 신뢰할 수 없습니다. (Wikies Wikipedia의 창시자에 의한 진술에 따라).
Martin York

5
첫 번째 인용부 (런타임 라이브러리에 관한)에서 "런타임 동안"은 무엇을 의미합니까? 쉬운 해석은 다음과 같다 : "프로그램이 실행되는 동안, 컴파일러는 병렬로 라이브러리 (자체를 위해)를 사용하여 (예를 들어 런타임에 추가 코드를 생성)"약속 된 "(언어 스펙에 의해) 구현 ) 프로그램의 기능 "을 참조하십시오. 이것은 런타임 시스템의 정의로 인해 잘못되었거나 쉽게 구부러 질 수 있습니다.
n611x007

2
Loki가 떠난 곳에서 계속하기 위해, 특히 기사 중 어느 것도 참조를 제공하지 않을 때 (즉, 내가 인용 한 것이 아니라고 생각합니다)
arsaKasra

1
@MartinYork는 신뢰할 수있는 백과 사전 일뿐만 아니라 설명이 아닌 문서에 중점을 둡니다. 그것들은 매우 다를 수 있습니다.
Roy Prins

59

실행 또는 실행 환경이 코드를 실행하고, 존재하는 언어 구현의 일부 런타임 ; 구현 의 컴파일 타임 부분을 C 표준에서 변환 환경 이라고합니다 .

예 :

  • Java 런타임은 가상 머신과 표준 라이브러리로 구성됩니다.

  • 공통 C 런타임은 로더 (운영 체제의 일부 임)와 컴파일러가 실행 파일에 내장하지 않은 C 언어 부분을 구현하는 런타임 라이브러리로 구성됩니다. 호스팅 환경에서 여기에는 표준 라이브러리의 대부분이 포함됩니다


2
고마워, 나는 이것이이 주제에서 가장 좋은 대답이라고 생각합니다.
Koray Tugay

1
"실행 환경"이라는 이름을 지정하는 것에 감사하지만 전자의 별명으로 "런타임"을 사용하는 것은 나쁜 생각 (많은 프로그래머들이하는 나의 관찰 결과), "런타임 환경"이 더 정확하다고 생각합니다. @ MichałTrybus에 동의합니다. "런타임"은 "프로그램이 실행되는 시간"을 의미합니다.
WloHu 2016 년

32

내 이해에서 런타임 은 정확히 그것이 의미하는 것입니다-프로그램이 실행되는 시간. 런타임 / 런타임 또는 컴파일 타임에 어떤 일이 발생한다고 말할 수 있습니다 .

나는 런타임런타임 라이브러리 가 (두 개가 아닌 경우) 두 개의 분리 된 것이어야 한다고 생각 합니다 . "C 런타임"이 옳지 않은 것 같습니다. "C 런타임 라이브러리"라고합니다.

다른 질문에 대한 답변 : 런타임 이라는 용어 는 프로그램이 실행될 때 환경과 컨텍스트를 포함하도록 확장 될 수 있다고 생각합니다 .

  • 다른 프로세스, 운영 체제 및 사용 된 라이브러리의 상태, 기타 프로세스의 상태 등과 같이 프로그램이 실행되는 동안 "환경"이라고 할 수있는 모든 것으로 구성됩니다.
  • 일반적인 의미에서 코드와 상호 작용하지 않으며 코드가 작동하는 환경, 실행 중에 사용 가능한 코드를 정의합니다.

이 대답은 사실이나 정의가 아닌 내 의견을 확장시키는 것입니다.


29

매트 볼이 올바르게 대답했습니다. 나는 예를 들어 그것에 대해 말할 것입니다.

Turbo-Borland C / C ++ (1991 년의 3.1 버전) 컴파일러로 컴파일 된 프로그램을 실행하고 Win 98/2000 등과 같은 32 비트 버전의 Windows에서 실행되도록하십시오.

16 비트 컴파일러입니다. 그리고 모든 프로그램에 16 비트 포인터가 있습니다. OS가 32 비트 일 때 왜 그렇습니까? 컴파일러가 16 비트의 실행 환경을 설정하고 32 비트 버전의 OS가이를 지원했기 때문에.

일반적으로 JRE (Java Runtime Environment)는 Java 프로그램에 실행에 필요한 모든 자원을 제공합니다.

실제로 런타임 환경은 가상 머신 아이디어의 핵심 제품입니다. 가상 머신 은 하드웨어와 프로그램 실행에 필요한 원시 인터페이스를 구현합니다 . 런타임 환경은 이러한 인터페이스를 채택하여 프로그래머가 사용할 수 있도록 제공합니다. 컴파일러 개발자는 프로그램에 실행 환경을 제공하기 위해 이러한 기능이 필요합니다.


가상 머신은 하드웨어와 프로그램 실행에 필요한 "원시"인터페이스를 구현합니다. -> 확실하지 않습니다.
Koray Tugay

7

코드가 실제로 생성되는 시간을 정확하게 실행하면 코드가하는 중요한 일을 많이 볼 수 있습니다.

런타임은 (파일 서비스, IO 서비스 .. 네트워크 서비스 등) 같은 운영 체제의 하위 시스템을 사용하여 메모리를 할당하고 메모리를 비우는 책임이 있습니다.

실제로 코드를 실행할 때까지 코드를 "작업 중"이라고합니다. 런타임은이를 해결하는 데 도움이되는 친구입니다.


3

런타임은 프로그램 수명의 현재 단계 (런타임 / 컴파일 시간 /로드 시간 / 링크 시간)를 나타내거나 실행 라이브러리와 인터페이스하는 기본 하위 레벨 조치를 형성하는 런타임 라이브러리를 의미 할 수 있습니다. 또는 실행 시스템과 동일한 런타임 시스템을 의미 할 수 있습니다.

C 프로그램의 경우 런타임은 C 환경에서 요구하는 스택, 힙 등을 설정하는 코드입니다. 본질적으로 언어가 약속 한 환경을 설정합니다. (런타임 라이브러리 구성 요소, crt0.lib 또는 C의 경우와 유사한 것을 가질 수 있음)


3

다음 폴더 구조 가 무엇인지 이해하는 데 매우 통찰력있는 컨텍스트를 만드는 것을 발견했습니다 runtime.

Mozilla XulRunner의 런타임

' 소스 '가 있고 ' SDK '또는 '소프트웨어 개발 키트'가있는 것을 알 수 Runtime있습니다. 런타임에 실행되는 것들. 내용은 다음과 같습니다

런타임 폴더 내용

win32 zip에는 .exe -s 및 .dll -s가 포함되어 있습니다.

예를 들어. C 런타임은 C 런타임 라이브러리, .so-s 또는 .dll -s와 같은 파일입니다. C 언어 ( '종이'로)를 선택한 다음 선택한 C 구현으로 구현하십시오. 그런 다음 해당 구현의 런타임을 사용하고 구현합니다.

즉, 약간의 편광으로 인해 새로운 C 기반 프로그램 사용자에게 필요한 실행 파일이 있습니다. C 기반 프로그램의 개발자로서 당신도 마찬가지이지만 C 컴파일러와 C 라이브러리 헤더도 필요합니다. 사용자는 필요하지 않습니다.


1
런타임 컨텍스트 화를위한 또 하나의 기사는 관련이없는 기사 python myths 's section myth 6입니다. 여기서 신화 6 의 첫 번째 단락에서 런타임프로그래밍 언어 의 차이점을 확인할 수 있습니다 .
n611x007

3

런타임은 기본적으로 프로그램이 기계의 하드웨어 및 운영 체제와 상호 작용할 때를 의미합니다. C에는 자체 런타임이 없지만 대신 운영 체제 (기본적으로 램의 일부)에서 런타임을 요청하여 자체를 실행합니다.


1

위의 답변을 읽은 것에 대한 나의 이해가 정확하다면 런타임은 기본적으로 가비지 수집, 메모리 할당, 기본적으로 간접적으로 호출되는 프로세스, 코드가 작성된 라이브러리 / 프레임 워크, 특히 프로세스와 같은 '백그라운드 프로세스'입니다 응용 프로그램이 실행되는 동안 컴파일 후 발생하는 프로세스


-1

MSDN 설명서의 다음 섹션에서는 대부분의 질문을 다룹니다. http://msdn.microsoft.com/en-us/library/8bs2ecf4(VS.71).aspx

이게 도움이 되길 바란다.

고마워요, 데미안


3
실제로는 그렇지 않습니다. 그는 .Net에 대해서만 묻지 않습니다.
SLaks

@ 매트 : 다시. 그러나 그의 런타임의 2/3는 .Net에 의해 지원되었으며, 그의 태그의 1/2은 .Net을 처리하며 링크가 유용하다고 생각했습니다.
Damian Schenkelman

"언어의 3/4는 .NET을 지원합니다"라고 말하고 싶습니다. .NET은 많은 지원을하지 않으며 미들웨어 수준에서 유닉스와 창 사이의 균열을 강력하게 유지하도록 설계되었습니다.
Matt Joiner

@MattJoiner-2010 년에 맞았을 수도 있지만 .NET 표준과 .NET Core와 같은 오픈 소스 구현에서 오늘날에는 사실과
맞지 않습니다

-2

런타임은 실행 중에 어떤 유형의 객체가 생성되는지 알 수없는 인스턴스이며, 객체 생성은 특정 조건 또는 일부 계산 작업을 기반으로합니다. 반대로 컴파일 시간은 필요한 객체가 실행되기 전에 사용자가 정의한 인스턴스입니다.


-3

런타임은 디자인 타임 및 컴파일 타임 / 링크 타임과 반대입니다. 역사적으로 기계 시간이 비싼 느린 메인 프레임 환경에서 비롯되었습니다.


1
이것은 질문에 대답하지 않으며 더 복잡하게 만듭니다.
cglotr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.