Apollo-11 : 링커 대신 포함 사용


9

최근에 디지털화되어 저장소로 바뀌어 원래 Apollo 11 안내 컴퓨터 소스 코드가 Github 에서 수있게되었습니다 .

에서 MAIN.agc 의 REPO 저자의 의견 그들은 그

거대한 모 놀리 식 소스 코드를보다 작고 관리하기 쉬운 덩어리 (예 : 개별 소스 # 파일)로 나눕니다.

조금 후에 저자는 말합니다

소스 파일을 개별적으로 조립 한 다음 링크하여 실행 파일을 만드는 것이 아니라 포함을 통해 수만 줄의 소스가 결합 된 이유를 합리적으로 묻습니다. 대답은 원래 개발 팀에 링커가 없다는 것입니다.

링커가 무엇인지 알고 있으며 그 요점을 이해합니다. 그러나 "ASM이 포함되는 한"은 "포함에 의해 결합 됨"이라는 문구를 들어 본 적이 없습니다.

이것은 무엇을 의미 하는가? 링커가 프로그래밍에 큰 영향을 미친다는 점을 고려할 때 링커를 "포함하는 수단"으로 대체하는 것이 무엇이고 어떻게 작동하는지 궁금합니다.


7
"포함에 의해 결합 된"의 예는의 #include지시문입니다 C. 다시 말해, 서로 링크 된 구성 요소로 컴파일 된 코드 빙이 아니라 $하나의 큰 소스 파일을 생성하기 위해 표기법에 해당 파일의 내용이 포함 된 것 같습니다 . 그런 다음 하나의 큰 소스 파일이 단일 엔티티로 컴파일됩니다.
David Arno

1
@DavidArno 귀하의 의견은 현재 보드에있는 두 가지 답변 중 하나보다 나은 답변처럼 보입니다.
Ross Presser

답변:


18

그들은 단순한 텍스트 연결 / 삽입을 의미하는 것 같습니다. 즉, 비록 소스 텍스트가 개별로 분리 된 파일프로그램 으로 분할되지 않은 모듈 .


-2

간단한 포함은 링크와 어떻게 비교됩니까?

따라서 #include "someCFile.c"를 사용하면 간단한 포함이 가능합니다.

기본적으로 링커는 런타임 라이브러리를 추가합니다. 포함하면이를 포함해야합니다.

객체에 진입 점이 포함 된 테이블과 이름을 가진 변수가있을 필요가 없기 때문에 포함에 더 적은 공간이 필요하다고 생각합니다. 동적 연결에서 진입 점 테이블이 있어야합니다. 정적 링크가 그것을 제거할지 아닌지 확실하지 않습니다. 그렇지 않다고 생각합니다.

처리 속도 측면에서 포함은 약간 더 빠를 수 있지만 (동적으로 연결된 라이브러리의 경우 확실히), 유연성이 떨어지고 여러 응용 프로그램이 동일한 라이브러리를 공유 할 수 없습니다.

이진 크기를 고려하면 포함이 더 커집니다.

컴파일 시간을 고려하면 포함 시간이 더 오래 걸립니다.

NASA 내비게이션 컴퓨터의 경우 내비게이션 컴퓨터가 하나의 프로그램 만 실행했기 때문에 간단한 포함이 가능했습니다.


2
나는 이것이 "그것이 무엇이고 어떻게 작동하는지"라는 질문에 대답하지 않는다고 생각합니다.
tofro

tofro : 나는 "무엇을 의미합니까?" 이진 크기 및 실행 속도 측면에서 실제적인 관점에서 무엇을 의미합니까?
Robert Baron

"내포물은 더 커질 것입니다"– 이것을 얻지 마십시오. 코드가 들어 있으면 바이너리에 들어가는 방법에 관계없이 코드가 들어간 공간을 사용합니다. 컴파일 시간에 동의하지 마십시오. 전체 빌드에는 동일한 시간이 걸립니다. 증분을 수행하는 빌드 경우에만 속도를 얻을, 나는이 이미 60ies에서 실시 된 의심
tofro

최소 운영 체제의 모든 기능이 실행 파일 내에 있으므로 실행 속도가 빨라지므로 인터럽트를 사용하는 대신 호출입니다 (8086의 인터럽트를 사용하는 DOS와 같은 최소 운영 체제를 고려하고 있습니다) 시스템 호출). 또한 전체 운영 체제가 포함되기 때문에 그렇지 않은 경우보다 더 많은 공간을 소비하고 컴파일 시간을 추가합니다.
Robert Baron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.