KR19980080502A - 템플릿 오브젝트 파일들을 최적화하기 위한 시스템과 방법 - Google Patents

템플릿 오브젝트 파일들을 최적화하기 위한 시스템과 방법 Download PDF

Info

Publication number
KR19980080502A
KR19980080502A KR1019980009681A KR19980009681A KR19980080502A KR 19980080502 A KR19980080502 A KR 19980080502A KR 1019980009681 A KR1019980009681 A KR 1019980009681A KR 19980009681 A KR19980009681 A KR 19980009681A KR 19980080502 A KR19980080502 A KR 19980080502A
Authority
KR
South Korea
Prior art keywords
code
instruction set
crc
file
object file
Prior art date
Application number
KR1019980009681A
Other languages
English (en)
Other versions
KR100311585B1 (ko
Inventor
퍽스마이클에이.
세혼마크에이.
Original Assignee
제프리엘.포맨
인터내셔널비지네스머신즈코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 제프리엘.포맨, 인터내셔널비지네스머신즈코포레이션 filed Critical 제프리엘.포맨
Publication of KR19980080502A publication Critical patent/KR19980080502A/ko
Application granted granted Critical
Publication of KR100311585B1 publication Critical patent/KR100311585B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은, 코드를 재사용하여 프로그램 내의 코드 공간을 절약하는 시스템과 방법을 제공한다. 컴파일러와 링커는 합동하여 템플릿 클래스의 구현, 및 다른 반복적인 코드 세그먼트들에 대해 어떤 오브젝트 코드(object code)를 재사용할 것인지를 결정한다. 컴파일러는 오브젝트 파일 내에서 어떤 함수들이 템플릿 코드로부터 발생되는지를 표시한다. 그 다음, 지능형 링커는 코드 정합을 시도하며, 코드가 정합하는 경우에, 함수명을 에일리어싱(aliasing)함으로써 중복된 동일한 코드를 간단히 제거한다. 컴파일러는 각각의 매쏘드와 함께 CRC 코드를 저장시킴으로써 링커의 검색량을 감소시킬 수 있다. 본 발명의 시스템 및 방법을 사용하여, 프로그램 효율성을 희생하지 않고 코드를 재사용하는 것이 가능하다.

Description

템플릿 오브젝트 파일들을 최적화하기 위한 시스템과 방법
본 발명은 정보 처리 시스템에 관한 것으로, 보다 구체적으로는, 정보 처리 시스템에서 실행하는 프로그램 코드에 의해 사용되는 템플릿 오브젝트 파일(template object file)들을 최적화하기 위한 시스템과 방법에 관한 것이다.
C++와 같은 객체-지향형 프로그래밍 언어에 있어서, 클래스 템플릿(class template)은 관련성 있는 변수형들의 무제한의 세트(unbounded set)에 대한 레이아웃과 동작을 정의한다. 템플릿은 엄격하게-정형화된 매크로 기능을 제공하며, 원시 코드 재사용성을 높힌다. 예를 들어, 스택에 대한 하나의 템플릿은, 정수 스택, 부동 소수 스택, 또는 문자 스트링에 대한 포인터 스택에 대하여 공통된 정의를 제공할 수 있다. 템플릿은 개개의 프로그램이 스택과 같은 객체를 구현하는데 사용될 수 있다. 프로그래머는 스택을 구현하는 코드를 작성하기보다는 간단히 스택 템플릿을 사용할 수 있다. 따라서, 템플릿은 프로그래머가 작성할 원시 코드의 양을 감소시키며, 코드 재사용성을 높여준다.
템플릿의 구현에 관련된 문제점은, 서로 다른 탬플릿 클래스 선언문에 대한 오브젝트 코드가 유사하거나 심지어 동일한데도, 각각의 서로 다른 템플릿 클래스 선언에 대해, 오브젝트 코드가 재사용이 가능한 곳에서도 재사용되지 않는다는 것이다. 이는, 프로그래머가 서로 다른 스택 클래스를 정의하여 사용하는 때마다, 템플릿 코드가 프로그램 내에 삽입된다는 것을 의미한다. 이로 인해, 프로그램 내에 중복된 코드가 존재하게 되는 결과가 생긴다.
따라서, 가능하다면 프로그램의 크기를 감소시키도록 코드를 재사용하기 위한 시스템과 방법을 가지는 것이 바람직하다. 또한, 코드의 효율성에는 거의 영향을 주지 않고 코드를 재사용하기 위한 시스템과 방법이 필요하다.
도 1은 본 발명의 최적화 방법을 실행할 수 있는 정보 처리 시스템의 블럭도.
도 2는 코드를 컴파일하고 링크하는 단계를 기술하는 플로우챠트.
도면의 주요 부분에 대한 부호의 설명
102 : 컴파일러
106 : 선행처리기
112 : 심볼 테이블
116 : 오브젝트 파일
118 : 링커
120 : 선행처리기
124 : 심볼 테이블
126 : 실행 파일
따라서, 본 발명은 코드를 재사용하여 프로그램 내의 코드 공간을 절약시켜 주는 시스템과 방법을 제공한다. 템플릿 클래스의 구현, 및 다른 반복적인 코드 세그먼트들에 대해, 컴파일러와 링커는 합동하여 어떤 오브젝트 코드를 재사용할지를 결정한다.
컴파일러는, 오브젝트 파일 내에서 어떤 함수가 템플릿 코드, 또는 다른 반복적 유형의 코드로부터 발생되는지를 기록해 둔다. 그 다음, 지능형 링커는 코드 정합을 시도하며, 코드 정합이 있는 경우에, 함수 명칭들을 에일리어싱(aliasing)하여 반복되는 동일한 코드를 제거한다. 컴파일러는 각각의 매쏘드와 함께 CRC(Cyclic Redundancy Check) 코드를 저장함으로써, 링커가 검색할 양을 감소시킬 수 있다(매쏘드는 클래스에 관련된 프로시져 또는 루틴임에 주목한다). 테스트를 통해, CRC만으로 충분한지 또는 링커가 보다 정확한 정합을 수행할 필요가 있는지의 여부를 알 수 있을 것이다.
본 발명의 한 실시예가 정보 처리 시스템에 상주하는 명령어 세트로서 주어져 있다.
본 발명의 시스템과 방법은 임의의 컴파일러와 링커가 생성된 오브젝트 코드를 최적화하는데 사용할 수 있다. 본 발명의 한 이점은 프로그램 내의 코드 공간을 절약하도록 코드가 최적화된다는 것이다. 본 발명의 또 다른 이점은 프로그램 효율성을 희생시키지 않고도 진정한 코드 재사용이 가능하다는 것이다.
본 발명의 앞서 언급한 이점 및 다른 이점들이, 이후에 설명되는 바와 같은 본 발명을 수행하기 위한 최적 모드의 상세한 설명으로부터 명백해질 것이다. 이후의 설명에서, 첨부된 도면이 참조될 것이며, 유사한 부분에는 유사한 참조 번호가 사용된다.
본 발명은 퍼스널 컴퓨터, 워크스테이션, 미니컴퓨터, 및 메인프레임 컴퓨터를 비롯한 다양한 하드웨어 플랫폼 상에서 구현될 수 있다. 본 발명의 방법의 많은 단계들은 다양한 유형의 병렬 프로세서 상에서 유리하게 구현될 수 있다. 도 1을 참조하여, 본 발명의 신규한 방법을 실시하는데 사용될 수 있는 정보 처리 시스템의 전형적인 구성이 설명될 것이다. 도 1의 컴퓨터 시스템은 최소한 하나의 프로세서(10)을 가진다. 프로세서(10)은 시스템 버스(12)를 통해, 랜덤 액세스 메모리(RAM, 16)와, 판독 전용 메모리(ROM, 14)와, 디스크 장치(20), 테이프 드라이버(40), 및 프린터(42)와 같은 주변 장치를 버스(12)에 접속시키기 위한 입력/출력(I/O) 어댑터(18)와, 키보드(24), 버턴(17a 및 17b)를 갖는 마우스(26), 스피커(28), 마이크로폰(32), 및/또는 터치 스크린 장치(29)와 같은 다른 사용자 인터페이스 장치를 버스(12)에 접속시키기 위한 사용자 인터페이스 어댑터(22)와, 정보 처리 시스템을 데이타 처리 네트워크에 접속시키기 위한 통신 어댑터(34)와, 버스(12)를 디스플레이 장치(38)에 접속시키기 위한 디스플레이 어댑터(36)에 접속된다. 통신 어댑터(34)는 도 1에 기술된 시스템을 원격 프린터, 원격 서버, 또는 원격 저장 장치와 수백 또는 수천의 유사한 시스템이나 다른 장치에 접속시킬 수 있다.
C++ 템플릿 오브젝트 파일을 최적화하는 과정을 참조하면서, 본 발명이 기술될 것이다. 그러나, 본 발명의 시스템 및 방법은 임의의 컴파일러, 임의의 반복적으로 생성된 코드와도 함께 사용될 수 있다.
스택을 위한 예시적 클래스 템플릿 정의가 아래의 C++ 코드로 주어져 있다.
#ifndef _STACK_TPL_H
#define _STACK_TPL_H
templateclass T
class stack
{
private:
T* v;
T* p;
int sz;
public:
stack(int);
~stack();
void push(T);
T pop();
int getSize();
};
#endif
식별자 T는 템플릿 유형을 나타낸다. 상기의 스택에 대한 클래스 구현은 다음과 같다.
templateclass TstackT::stack(int s)
{
v = p = new T[sz=s];
}
templateclass TstackT::~stack()
{
delete [] v;
}
templateclass Tvoid stackT::push(T a)
{
*p++ = a ;
}
templateclass T T stackT::pop()
{
return *(--p);
}
templateclass T int stackT::getSize()
{
return sz;
}
상기의 클래스 템플릿의 또 다른 선언문(즉, 템플릿 클래스)는 다음과 같다.
#include stk.h
typedef char *pCHAR;
typedef unsigned short *pUSHORT;
typedef int *pINT;
typedef unsigned int *pUINT;
stackunsigned int dummy0(10);
stackint dummy1(10);
stackunsigned short dummy2(10);
stackpCHAR dummy3(10);
stackpUSHORT dummy4(10);
stackpINT dummy5(10);
stackpUINT dummy6(10);
정수에 대한 스택 클래스는 다음과 같이 사용될 수 있다.
#include iostream.h
#include stk.h
{
stackint s(10);
cout Pushing the sequence of numbers : 2 4 1 3\n;
s.push(2);
s.push(4);
s.push(1);
s.push(3);
cout Popping the numbers:expecting 3 1 4 2\n;
cout Sequence from Pop operation: ;
cout s.pop() ' ';
cout s.pop() ' ';
cout s.pop() ' ';
cout s.pop() '\n';
return 0;
}
코드가 컴파일될 때, 각각의 매쏘드가 템플릿을 위해 사용된 변수형(즉, int, char등)에 무관하더라도, C++ 컴파일러는 전형적으로 각각의 매쏘드(예를 들어, push, pop 등)에 대한 코드를 반복한다. 어떤 경우에는, 템플릿 선언문에 사용된 변수형에 있어서의 차이점들 때문에, 코드가 서로 달라야 할 필요가 있다. 그러나, 많은 경우에 있어서, 코드는 동일하거나, 거의 동일할 것이다.
예를 들어, 각각의 서로 다른 변수형들에 대하여 pop() 매쏘드를 위해 생성된 어셈블리 코드가 아래에 주어져 있다.
unsigned int:
pop_stackXTUi_Fv proc
mov ecx, eax
mov eax, [ecx+04h]
lea edx, [eax-04h]
mov [ecx+04h], edx
mov eax, [eax-04h]
ret
pop_stackXTUi_Fv endp
int:
pop_stackXTi_Fv proc
mov ecx, eax
mov eax, [ecx+04h]
lea edx, [eax-04h]
mov [ecx+04h], edx
mov eax, [eax-04h]
ret
pop_stackXTi_Fv endp
unsigned short:
pop_stacjXTUs_Fv proc
mov edx, eax
push ebx
mov ecx, [edx+04h]
xor eax, eax
lea ebx, [ecx-02h]
mov [edx+04h], ebx
pop ebx
mov ax, [ecx-02h]
ret
pop_stackXTUs_Fv endp
char:
pop_stackXTc_Fv proc
mov edx, eax
push ebx
mov cx, [edx+04h]
xor eax, eax
lea bx, [ecx-01h]
mov [edx+04h], ebx
pop ebx
mov a1, [ecx-01h]
ret
pop_stackXTc_Fv endp
unsigned int 및 int에 대해 발생된 코드는 정확히 같다는 것에 주목한다. 이들 변수형의 크기가 동일하기 때문에(즉, 각각 4 바이트), 이러한 사실은 예상밖의 일은 아니다. unsigned int는 크기가 단지 2 바이트이고 char는 크기가 단지 1 바이트이기 때문에, unsigned short 및 char에 대한 코드는 예상대로 다르다.
아래에 도시된 바와 같이, 모든 유형의 포인터에 대해 생성된 코드는, unsigned int와 int에 대한 코드가 동일한 것과 마찬가지로 동일하다.
pointer to unsigned int:
pop_stackXTPUi_Fv proc
mov ecx, eax
mov eax, [ecx+04h]
lea edx, [eax-04h]
mov [ecx+04h], edx
mov eax, [eax-04h]
ret
pop_stackXTPUi_Fv endp
pointer to int:
pop_stackXTPi_Fv proc
mov ecx, eax
mov eax, [ecx+04h]
lea edx, [eax-04h]
mov [ecx+04h], edx
mov eax, [eax-04h]
ret
pop_stackXTPi_Fv endp
pointer to unsigned short:
pop_stackXTPUs_Fv proc
mov ecx, eax
mov eax, [ecx+04h]
lea edx, [eax-04h]
mov [ecx+04h], edx
mov eax, [eax-04h]
ret
pop_stackXTPUs_Fv endp
pointer to char:
pop_stackXTPc_Fv proc
mov ecx, eax
mov eax, [ecx+04h]
lea edx, [eax-04h]
1. mov [ecx+04h], edx
mov eax, [eax-04h]
ret
pop_stackXTPc_Fv endp
getSize() 매쏘드에 대해 생성된 코드는 선언된 템플릿 클래스에 관계없이 동일하다. 또한, 생성자(constructor) 및 소멸자(destructor)에 대해 생성된 코드도 역시 선언된 템플릿 클래스에 관계없이 동일하다.
이들 예로부터 2개의 원리가 도출된다.
1. 매쏘드 내에 템플릿 유형이 사용되고 있지 않다면 생성된 코드는 동일하다.
2. 템플릿 유형의 크기가 동일하다면, 생성된 코드는 대개 동일하다.
상술한 원리에 기초하여, 본 발명은, 컴파일러 및 링커가 가능하다면 템플릿 클래스의 구현을 위해 오브젝트 코드를 재사용할 수 있는 시스템과 방법을 제공한다. 컴파일러는 오브젝트 파일에서 어떤 함수가 템플릿 코드로부터 발생하는지를 기록한다. 그 다음, 지능형 링커는 코드 정합을 시도하고, 코드가 정합되는 경우에는, 함수명을 에일리어싱함으로써 반복되는 동일한 코드를 제거한다. 컴파일러는 각각의 매쏘드와 함께 CRC를 저장함으로써 링커가 검색할 양을 감소시킬 수 있다. 다양한 테스트를 통해, CRC만으로 충분한지 또는 링커가 보다 정확한 정합을 수행할 필요가 있는지의 여부를 알 수 있을 것이다. 물론 실제적인 구현은 컴파일러에 따라 다르지만, 한 예가 도 2를 참조하여 설명될 것이다.
본 발명은 매쏘드(method)가 템플릿 유형에 직접 구속되지 않는 데이타 조작을 수행할 때 클래스 템플릿을 최적화하는데 특히 유용하다. 공통적인 예가, 대부분의 매쏘드는 컬렉션(collection)을 워킹(walking)하고 단지 몇 개의 매쏘드만이 컬렉션 내에 요소를 추가, 삭제, 또는 검색하는 컬렉션 클래스(collection class)이다.
또한, 상술한 최적화로부터 상당한 이익을 끌어내도록 클래스 라이브러리의 구현이 수정될 수도 있다. 예를 들어, 템플릿의 유형이 되는 파라미터들은, 비교적 큰 구현 함수를 호출하기 전에 포인터들로 변환될 수 있다. 그 결과, 각각의 템플릿 유형에 대해 단지 래퍼 함수(wrapper function)만이 다르게 된다.
도 2를 참조하면, 본 발명에 따라 코드를 컴파일 및 링크하는 방법이 설명될 것이다. 컴파일 단계(102) 동안에, 원시 파일(104)는 선행처리기(preprocessor, 106), 문장 검사기 및 구문 해석기(syntax checker and parser, 108), 및 코드 생성기(code generator, 110)을 통해 처리된다. 선행처리기(106), 문장 검사기 및 구문 해석기(108), 및 코드 생성기(110)은 심볼 테이블(symbol table, 112)를 생성한다. 그 다음, 생성된 코드는 최적화되고(114), 오브젝트 파일(116)이 생성된다.
링크 단계(118) 동안에, 하나 이상의 오브젝트 파일(116)이 선행처리기(120) 및 실행파일 생성기(executable generator, 122)에 의해 처리되어 함께 링크된다. 심볼 테이블(124)는 링크를 수행하는데 사용된다(즉, 전역 명칭을 모아서 분석). 또한, 심볼 테이블(124)는 발견된 모든 코멘트 레코드(comment record)를 수집하여 저장하는데 사용된다. 코멘트 레코드들은 템플릿 오브젝트 코드를 식별하는데 사용되며, 아래에 보다 상세히 설명될 것이다. 마지막으로, 실행 코드 모듈(126)이 생성된다.
이 예의 목적상, STK.CPP란 이름의 파일 내에 스택 템플릿을 구현하는 경우를 가정하자. 그리고, 아래의 코드는 TEST.CPP란 이름의 원시 파일(104)에서 발췌한 것이다.
#include iostream.h
#include stk.h
stackint i(10);
stackunsigned short * s(10);
i.push(1);
i.push(2);
unsigned short j = 1;
s.push(j);
j = 2;
s.push(j);
cout i.getSize() elements in integer stack\n;
cout s.getSize()
elements in unsigned short pointer stack\n;
TEST.CPP가 컴파일 될 때, 3개의 오브젝트 파일(116)이 생성된다. 하나는 TEST.CPP에 대한 것이고, 나머지는 스택 템플릿 클래스의 각각의 서로 다른 기동부(invocations)에 대하여 하나씩이다. 2개의 독립된 기동부 각각에 대한 템블릿 파일 오브젝트의 이름이 STK1.OBJ 및 STK2.OBJ라 하자.
컴파일 단계(102) 동안에, 컴파일러는 각각의 템플릿 함수에 대한 각각의 오브젝트 파일에 코멘트 레코드를 추가한다. 물론, 컴파일러가 코멘트 레코드를 추가하는 정확한 위치는 컴파일러에 따라 다르다. 코멘트 레코드에는 템플릿 파일명, 라인 번호, 함수명, 및 오브젝트 코드에 대한 CRC[또는 체크섬(checksum)]가 포함된다. 예를 들어, STK1.OBJ은 아래의 표와 같은 내용을 포함한다.
파일명 라인 번호 CRC 함수
STK1.OBJ 1 8D23 _C_stack_Fv
STK1.OBJ 6 CAA1 _D_stack_Fv
STK1.OBJ 10 3A1F push_stack_Fi
STK1.OBJ 15 4A2C pop_stack_XTi_Fv
STK1.OBJ 20 1CAD getSize_stackXTi_Fv
예를 들어, STK2.OBJ는 아래의 표와 같은 내용을 포함한다.
파일명 라인 번호 CRC 함수
STK2.OBJ 1 8D23 _C_stack_Fv
STK2.OBJ 6 CAA1 _D_stack_Fv
STK2.OBJ 10 3A1F push_stack_FPUs
STK2.OBJ 15 4A2C pop_stack_XTPUs_Fv
STK2.OBJ 20 1CAD getsize_stackXTPUs_Fv
링크 단계(118)의 선행처리 단계(120) 동안에, 링커는 심볼 테이블(124)에 이들 코멘트 레코드를 저장한다. 링커 단계(118)의 실행파일 생성 단계(122) 동안에, 공통된 코멘트 레코드를 찾기 위해 오브젝트 파일 내의 코멘트 레코드가 검색된다. 이러한 검색이 발생하는 단계(122) 내의 정확한 위치는 링커에 따라 다르다. 이러한 검색의 속도는 CRC를 사용하여 개선된다. 만일, 2개의 CRC 코드가 동일하다면, CRC 코드를 생성하는데 사용되는 코드 바이트도 역시 동일할 가능성이 크다. 따라서, 링커가 정합하는 CRC 코드를 발견한다면, 저변 코드가 동일한지를 비교하기 위해 실제의 명령어들을 비교할 것이다.
정합이 발견되면, 링커는 발견된 함수를 에일리어싱하는 중복된 진입점의(entry point) 세트를 실행 파일 내에 생성하고, 어드레스들을 새로운 함수명으로 조절할 것이다. 설명된 예에서, 매핑은 다음과 같다.
파일명 라인 번호 CRC 함수
STK1.OBJ 1 8D23 _C_stack_Fv
STK1.OBJ 6 CAA1 _D_stack_Fv
STK1.OBJ 10 3A1F push_stack_Fi
STK1.OBJ 15 4A2C pop_stack_XTi_Fv
STK1.OBJ 20 1CAD GetSize_stackXTi_Fv
STK2.OBJ 1 8D23 _C_stack_Fv
STK2.OBJ 6 CAA1 _D_stack_Fv
STK2.OBJ 10 3A1F push_stack_FPUs
STK2.OBJ 15 4A2C pop_stackXTPUs_Fv
STK2.OBJ 20 1CAD getSize_stackZTU_Fv
오브젝트 STK1.OBJ이 모든 심볼 명들과 레퍼런스들을 분석하는데 사용되었기 때문에, STK2.OBJ에 대한 중복된 코멘트 레코드는 역시 무효화된다.
파일명 라인 번호 CRC 함수
STK2.OBJ -- ---- ----
STK2.OBJ -- ---- ----
STK2.OBJ -- ---- ----
STK2.OBJ -- ---- ----
STK2.OBJ -- ---- ----
도시된 예에서, 코드의 50%가 제거되어, 상당한 코드 공간이 절약되었다. 스택 함수들(즉, 생성자, 소멸자, push, pop, 및 getSize)의 각각에 대해, 실행 코드 내에는 단지 하나의 진입점만이 있다. 예를 들어, 정수를 정수 스택 상에 푸쉬하기 위한 호출[즉, 원시 파일에서 i.push(1)과 i.push(2)]는 unsigned short에 대한 포인터를 unsigned short stack에 대한 포인터 상에 푸쉬하기 위한 호출[즉, 최초의 원시 코드 내의 s.push(j)]와 동일한 실행 코드를 호출할 것이다. 명령어 세트가 동일한 모든 함수에 대해, 단지 하나의 명령어 세트만이 실행 모듈 내에 존재한다.
비록 본 발명의 어느 정도의 특정성을 가지고 기술되었지만, 그 요소들은 본 발명의 원리와 범위로부터 벗어나지 않고 당업자에 의해 변경될 수 있음을 알아야 한다. 본 발명의 실시예들 중 하나는 도 1에 도시된 바와 같은 일반적으로 구성된 하나 이상의 랜덤 액세스 메모리(16) 내에 상주하는 명령어 세트로서 구현될 수 있다. 이들 명령어 세트들은, 컴퓨터 시스템에 의해 요구될 때까지, 예를 들어, 하드 디스크 드라이버, 또는 최종적으로 CD_ROM 드라이브에서 사용될 광학 디스크나 최종적으로 플로피 디스크 드라이브에서 사용될 플로피 디스크와 같은 제거가능한 메모리 내에 저장될 수 있다. 또한, 명령어 세트는 다른 컴퓨터의 메모리 내에 저장되어서, 사용자가 원하면, 지역 네트워크(LAN) 또는 인터넷과 같은 광역 네트워크(WAN)를 통해 전송될 수도 있다. 당업자는 명령어 세트의 물리적 저장은, 명령어 세트가 전기적, 자기적, 또는 화학적으로 저장되는 매체를 변경시켜, 매체가 컴퓨터 판독가능한 정보를 운반하도록 한다. 본 발명은 첨부된 청구 범위와 그 등가물에 의해서만 제한된다.
프로그램의 크기를 감소시키면서, 프로그램의 효율성에는 거의 영향을 주지 않고 코드를 재사용하기 위한 시스템과 방법이 제공된다.

Claims (21)

  1. 실행 프로그램을 생성하는 방법에 있어서,
    하나 이상의 원시 파일을 컴파일(compile)하여 각각의 원시 파일(original file)에 대한 오브젝트 파일(object file)을 생성하는 컴파일 단계,
    각각의 오브젝트 파일을 검색하여 하나 이상의 반복된 명령어 세트가 있는지를 판별하는 검색 단계, 및
    오브젝트 파일들을 함께 링크(link)하여 실행 모듈(executable module)을 생성하는 링크 단계
    를 포함하고,
    상기 실행 모듈은 각각의 반복된 명령어 세트의 사본 1개를 포함하는 실행 프로그램 생성 방법.
  2. 제1항에 있어서, 상기 컴파일 단계는 각각의 오브젝트 파일에 코멘트 레코드(comment record)를 추가하는 단계를 더 포함하는 실행 프로그램 생성 방법.
  3. 제2항에 있어서, 상기 코멘트 레코드는 하나 이상의 잠재적으로 반복된 명령어 세트의 이름과 위치를 포함하는 실행 프로그램 생성 방법.
  4. 제2항에 있어서, 상기 코멘트 레코드는 파일명(file name), 라인 번호(line number), CRC(Cyclic Redundance Check), 및 함수명(function name)을 포함하는 실행 프로그램 생성 방법.
  5. 제1항에 있어서, 상기 컴파일 단계는 모든 잠재적으로 반복된 명령어 세트에 대해 CRC 코드를 계산하는 단계를 더 포함하는 실행 프로그램 생성 방법.
  6. 제5항에 있어서, 상기 검색 단계는
    각각의 오브젝트 파일을 검색하여 하나 이상의 정합하는(matching) CRC가 있는지를 판별하는 단계, 및
    만일 정합하는 CRC가 발견되면, 정합하는 CRC에 관련된 명령어 세트들을 비교하여 명령어 세트들이 동일한지를 판별하는 단계
    를 포함하는 실행 프로그램 생성 방법.
  7. 제1항에 있어서, 상기 링크 단계는
    상기 검색 단계 동안에 발견된 각각의 반복된 명령어 세트에 대해 중복된 진입점(entry point) 세트를 실행 모듈 내에 생성하는 단계, 및
    상기 반복된 명령어 세트의 1개의 사본으로 제어를 이동시키기 위해, 상기 실행 모듈 내의 하나 이상의 함수 호출의 어드레스를 조절하는 단계
    를 포함하는 실행 프로그램 생성 방법.
  8. 정보 처리 시스템에 있어서,
    하나 이상의 프로세서,
    저장 수단,
    입력/출력 수단,
    디스플레이 수단,
    상기 프로세서들의 동작을 제어하기 위한 오퍼레이팅 시스템(operating system)의 하나 이상의 이미지(image),
    하나 이상의 원시 파일을 컴파일하여 각각의 원시 파일에 대해 오브젝트 파일을 생성하기 위한 수단,
    각각의 오브젝트 파일을 검색하여 하나 이상의 반복된 명령어 세트가 있는지를 판별하기 위한 검색 수단, 및
    상기 오브젝트 파일들을 함께 링크하여 하나의 실행 모듈을 생성하기 위한 링크 수단을 포함하며,
    상기 실행 모듈은 각각의 반복된 명령어 세트의 1개의 사본을 포함하는 정보 처리 시스템.
  9. 제8항에 있어서, 상기 컴파일 수단은 각각의 오브젝트 파일에 코멘트 레코드를 추가시키기 위한 수단을 더 포함하는 정보 처리 시스템.
  10. 제9항에 있어서, 상기 코멘트 레코드는 하나 이상의 잠재적으로 반복된 명령어 세트들의 이름과 위치를 포함하는 정보 처리 시스템.
  11. 제9항에 있어서, 상기 코멘트 레코드는 파일명, 라인 번호, CRC, 및 함수명을 포함하는 정보 처리 시스템.
  12. 제8항에 있어서, 상기 컴파일 수단은 모든 잠재적으로 반복된 명령어 세트에 대해 CRC를 계산하기 위한 수단을 더 포함하는 정보 처리 시스템.
  13. 제12항에 있어서, 상기 검색 수단은
    각각의 오브젝트 파일을 검색하여 하나 이상의 정합하는 CRC가 있는지를 판별하기 위한 수단, 및
    만일 정합하는 CRC가 발견되면, 상기 정합하는 CRC에 관련된 명령어 세트들을 비교하여 명령어 세트들이 동일한지의 여부를 판별하기 위한 수단
    을 포함하는 정보 처리 시스템.
  14. 제9항에 있어서, 상기 링크 수단은
    상기 검색 단계 동안에 발견된 각각의 반복된 명령어 세트에 대해 중복된 진입점의 세트를 실행 모듈 내에 생성하기 위한 수단, 및
    반복된 명령어 세트의 한 사본으로 제어를 이동하기 위해 실행 모듈 내의 하나 이상의 함수 호출의 어드레스를 조절하기 위한 수단
    을 포함하는 정보 처리 시스템.
  15. 컴퓨터 판독 가능한 매체에 있어서,
    하나 이상의 원시 파일을 컴파일하여 각각의 원시 파일에 대해 오브젝트 파일을 생성하기 위한 컴파일 수단,
    각각의 오브젝트 파일을 검색하여 하나 이상의 반복된 명령어 세트가 있는지를 판별하기 위한 검색 수단, 및
    상기 오브젝트 파일들을 링크하여 하나의 실행 모듈을 생성하기 위한 링크 수단
    을 포함하며,
    상기 실행 모듈은 각각의 반복된 명령어 세트의 1개의 사본을 포함하는 컴퓨터 판독가능한 매체.
  16. 제15항에 있어서, 상기 컴파일 수단은 각각의 오브젝트 파일에 코멘트 레코드를 추가시키기 위한 수단을 더 포함하는 컴퓨터 판독가능한 매체.
  17. 제16항에 있어서, 상기 코멘트 레코드는 하나 이상의 잠재적으로 반복되는 명령어 세트의 이름과 위치를 포함하는 컴퓨터 판독가능한 매체.
  18. 제16항에 있어서, 상기 코멘트 레코드는 파일명, 라인 번호, CRC, 및 함수명을 포함하는 컴퓨터 판독가능한 매체.
  19. 제15항에 있어서, 상기 컴파일 수단은 모든 잠재적으로 반복된 명령어 세트에 대해 CRC를 계산하기 위한 수단을 더 포함하는 컴퓨터 판독가능한 매체.
  20. 제19항에 있어서, 상기 검색 수단은
    각각의 오브젝트 파일을 검색하여 하나 이상의 정합하는 CRC가 있는지를 판별하기 위한 수단, 및
    정합하는 CRC가 발견되면, 명령어 세트가 동일한지를 판별하기 위해 정합하는 CRC에 관련된 명령어 세트를 비교하기 위한 수단
    을 포함하는 컴퓨터 판독가능한 매체.
  21. 제15항에 있어서, 상기 링크 수단은
    상기 검색 단계 동안에 발견된 각각의 반복된 명령어 세트에 대해 실행 모듈 내에 중복된 진입점의 세트를 생성하기 위한 수단, 및
    반복된 명령어 세트의 한 사본으로 제어를 이동시키기 위해 실행 모듈 내의 하나 이상의 함수 호출의 어드레스를 조절하기 위한 수단
    을 포함하는 컴퓨터 판독가능한 매체.
KR1019980009681A 1997-04-28 1998-03-20 템플릿오브젝트파일들을최적화하기위한시스템과방법 KR100311585B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US8/848,629 1997-04-28
US08/848,629 US6041180A (en) 1997-04-28 1997-04-28 System and method for optimizing template object files
US08/848629 1997-04-28

Publications (2)

Publication Number Publication Date
KR19980080502A true KR19980080502A (ko) 1998-11-25
KR100311585B1 KR100311585B1 (ko) 2001-11-15

Family

ID=25303846

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019980009681A KR100311585B1 (ko) 1997-04-28 1998-03-20 템플릿오브젝트파일들을최적화하기위한시스템과방법

Country Status (4)

Country Link
US (1) US6041180A (ko)
KR (1) KR100311585B1 (ko)
SG (1) SG77177A1 (ko)
TW (1) TW364099B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100673313B1 (ko) * 2004-12-30 2007-01-24 재단법인서울대학교산학협력재단 코드조각 번호 매김을 이용한 프로그램 간의 코드조각결합방법

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7810069B2 (en) * 1999-10-05 2010-10-05 Borland Software Corporation Methods and systems for relating data structures and object-oriented elements for distributed computing
US7080370B1 (en) * 1999-11-05 2006-07-18 Sun Microsystems, Inc. Method and apparatus for compiling source programs using one or more libraries
US6631516B1 (en) * 2000-04-25 2003-10-07 International Business Machines Corporatioin Extended syntax record for assembler language instructions
CA2355989A1 (en) * 2001-08-27 2003-02-27 Ibm Canada Limited-Ibm Canada Limitee Compiling source code files having multiple
JP3826859B2 (ja) * 2002-08-19 2006-09-27 ソニー株式会社 情報処理方法とその方法を実現するプログラム及び記録媒体
CA2418670A1 (en) * 2003-02-11 2004-08-11 Ibm Canada Limited - Ibm Canada Limitee Method and system for generating executable code for formatiing and printing complex data structures
US20050050394A1 (en) * 2003-08-27 2005-03-03 Chih-Hung Chien System that uses reference codes to establish properties of grogram modules and method of the same
US20050055682A1 (en) * 2003-09-08 2005-03-10 Microsoft Corporation Authoring and using generic classes in JAVA language code
US7543271B2 (en) * 2003-09-08 2009-06-02 Microsoft Corporation Compiling source code using generic classes
US7818729B1 (en) * 2003-09-15 2010-10-19 Thomas Plum Automated safe secure techniques for eliminating undefined behavior in computer software
US8255888B2 (en) * 2003-09-30 2012-08-28 Sap Ag API derivation and XML schema derivation for developing applications
US7543268B2 (en) * 2003-09-30 2009-06-02 Sap Ag Development environment for developing applications using a metamodel and a metadata API
EP1538509A1 (fr) * 2003-12-04 2005-06-08 Axalto S.A. Procédé de sécurisation de l'éxécution d'un programme contre des attaques par rayonnement
US7487493B1 (en) 2003-12-30 2009-02-03 Itt Manufacturing Enterprises, Inc. Method and apparatus for developing standard architecture compliant software for programmable radios
US20060100975A1 (en) * 2004-10-25 2006-05-11 Microsoft Corporation Strongly-typed object oriented GUI automation framework
US20060101392A1 (en) * 2004-10-27 2006-05-11 Microsoft Corporation Strongly-typed UI automation model generator
US20060116864A1 (en) * 2004-12-01 2006-06-01 Microsoft Corporation Safe, secure resource editing for application localization with automatic adjustment of application user interface for translated resources
US7716641B2 (en) * 2004-12-01 2010-05-11 Microsoft Corporation Method and system for automatically identifying and marking subsets of localizable resources
US7617092B2 (en) * 2004-12-01 2009-11-10 Microsoft Corporation Safe, secure resource editing for application localization
US20080201689A1 (en) * 2005-06-30 2008-08-21 Freescale Semiconductor, Inc. Vector Crc Computatuion on Dsp
US8473971B2 (en) 2005-09-06 2013-06-25 Microsoft Corporation Type inference and type-directed late binding
GB0604136D0 (en) * 2006-03-01 2006-04-12 Symbian Software Ltd Improvements related to the delivery of embedded software and usage of memory in a computing device
FR2898704B1 (fr) * 2006-03-14 2008-06-06 Proton World Internatinal Nv Protection d'un programme contre un deroutement
US20080320453A1 (en) * 2007-06-21 2008-12-25 Microsoft Corporation Type inference and late binding
US20100106541A1 (en) * 2008-10-28 2010-04-29 Oracle International Corporation Analyzing the Readiness of a Template
US8312390B2 (en) 2009-06-10 2012-11-13 Microsoft Corporation Dynamic screentip language translation
US8707161B2 (en) * 2009-09-30 2014-04-22 Facebook, Inc. Executing server side script code specified using PHP on a server to generate dynamic web pages
US8572591B2 (en) 2010-06-15 2013-10-29 Microsoft Corporation Dynamic adaptive programming
US8683455B1 (en) 2011-01-12 2014-03-25 Google Inc. Method and system for optimizing an executable program by selectively merging identical program entities
US8689200B1 (en) * 2011-01-12 2014-04-01 Google Inc. Method and system for optimizing an executable program by generating special operations for identical program entities
US9256401B2 (en) 2011-05-31 2016-02-09 Microsoft Technology Licensing, Llc Editor visualization of symbolic relationships
CN104063258B (zh) * 2013-03-21 2017-05-03 国际商业机器公司 用于调试过程中的代码动态切换的方法和系统
CN103324513B (zh) * 2013-06-04 2016-08-10 北京大学 程序注释方法和装置
JP6264179B2 (ja) * 2014-04-28 2018-01-24 富士通株式会社 コンパイル方法、コンパイル装置およびコンパイルプログラム
US9684497B1 (en) * 2015-12-10 2017-06-20 International Business Machines Corporation Optimized compiling of a template function
US10133559B2 (en) 2016-06-03 2018-11-20 International Business Machines Corporation Generating executable files through compiler optimization
JP6759851B2 (ja) * 2016-08-22 2020-09-23 富士通株式会社 プログラム生成プログラム、プログラム生成方法、プログラム生成装置及びコンパイルプログラム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2834171B2 (ja) * 1989-02-06 1998-12-09 株式会社日立製作所 コンパイル方法
US5642514A (en) * 1995-05-24 1997-06-24 International Business Machines Corporation Method and system for constructing compact executable files by eliminating redundant debugging strings
US5790867A (en) * 1996-01-02 1998-08-04 International Business Machines Corporation Compiler with extended redundant copy elimination
US5812854A (en) * 1996-03-18 1998-09-22 International Business Machines Corporation Mechanism for integrating user-defined instructions with compiler-generated instructions and for optimizing the integrated instruction stream

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100673313B1 (ko) * 2004-12-30 2007-01-24 재단법인서울대학교산학협력재단 코드조각 번호 매김을 이용한 프로그램 간의 코드조각결합방법

Also Published As

Publication number Publication date
TW364099B (en) 1999-07-11
SG77177A1 (en) 2000-12-19
US6041180A (en) 2000-03-21
KR100311585B1 (ko) 2001-11-15

Similar Documents

Publication Publication Date Title
KR100311585B1 (ko) 템플릿오브젝트파일들을최적화하기위한시스템과방법
Diaz et al. Design and implementation of the gnu prolog system
US7757225B2 (en) Linktime recognition of alternative implementations of programmed functionality
US5848274A (en) Incremental byte code compilation system
EP1178404B1 (en) Method and system for compiling multiple languages
Fraser et al. Engineering a simple, efficient code-generator generator
US5854932A (en) Compiler and method for avoiding unnecessary recompilation
US7725883B1 (en) Program interpreter
US7380242B2 (en) Compiler and software product for compiling intermediate language bytecodes into Java bytecodes
US6973646B1 (en) Method for compiling program components in a mixed static and dynamic environment
US5680622A (en) System and methods for quickly detecting shareability of symbol and type information in header files
US5764989A (en) Interactive software development system
Johnson et al. TS: An optimizing compiler for Smalltalk
US5960197A (en) Compiler dispatch function for object-oriented C
Hummel et al. Annotating the Java bytecodes in support of optimization
US6810519B1 (en) Achieving tight binding for dynamically loaded software modules via intermodule copying
US6330714B1 (en) Method and computer program product for implementing redundant lock avoidance
Strumpen Compiler technology for portable checkpoints
Koskimies et al. The design of a language processor generator
US20080147955A1 (en) System and method for efficient string concatenation in a virtual machine environment
Kalleberg et al. Fusing a transformation language with an open compiler
Chambers et al. Iterative type analysis and extended message splitting: Optimizing dynamically-typed object-oriented programs
Atterer Automatic test data generation from VDM-SL specifications
US11106522B1 (en) Process memory resurrection: running code in-process after death
Kågström et al. Cibyl: an environment for language diversity on mobile devices

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
LAPS Lapse due to unpaid annual fee