US5535391A
Expired / Lapsed
US
⏱️ 0.0 years remaining
System and methods for optimizing object-oriented compilations
Assignee: CODEGEAR LLC
•
Filing: 1995-02-15
•
Granted: 1996-07-09
•
Expires: 2015-02-15
Abstract
Abstract An object-oriented development system of the present invention includes a language compiler having an optimizer for generating computer applications with improved speed and size. C++ optimization methods of the present invention are described, including virtual function and base optimization, using thunks for virtual member pointers, and passing classes by value. An object-oriented calling convention of the present invention, which affords rapid and efficient access to data and methods of objects, is also described.
Inventors
- 👤 Anders Hejlsberg
- 👤 Jeffrey Stock
- 👤 Peter Kukol
- 👤 Alex Shtaygrud
Bibliographic Details
Application Number
—
Jurisdiction
US
Data Source
google_patents
Last Synchronized
2026-11-01 18:54
CPC Classifications
G; G06; G06F; G06F8/00; G06F8/40; G06F8/41; G06F8/44; G06F8/443; G06F8/4434; G06F8/447; G06F9/00; G06F9/06; G06F9/44; G06F9/448; G06F9/4482; G06F9/4484; G06F9/4488; G06F9/449; G06F9/4491
Claims Analysis
Total Claims: 23
Claim 1
Independent Claim
162 words
In a system for compiling C++ source listings into code for operating a computer, the source listings including C++ objects instantiated from C++ classes defining class methods and data members, the system including a memory and a processor having registers for loading segment and offset addresses of memory locations, a method for controlling access to said methods and data members, the method comprising: (a) defining a class of objects, said class including data members and methods operative on said data members; (b) creating an object of said defined class by storing data members for said object at a default data segment in said memory; (c) maintaining a segment address for said data segment in a data segment addressing register of said processor; and (d) accessing said data members by loading an offset into a selected register, whereupon said data members are accessed by combining said segment address stored in said data segment address register with said offset stored in said selected register.
Claim 2
Dependent Claim
162 words
In a system for compiling C++ source listings into code for operating a computer, the source listings including C++ objects instantiated from C++ classes defining class methods and data members, the system including a memory and a processor having registers for loading segment and offset addresses of memory locations, a method for controlling access to said methods and data members, the method comprising: (a) defining a class of objects, said class including data members and methods operative on said data members; (b) creating an object of said defined class by storing data members for said object at a default data segment in said memory; (c) maintaining a segment address for said data segment in a data segment addressing register of said processor; and (d) accessing said data members by loading an offset into a selected register, whereupon said data members are accessed by combining said segment address stored in said data segment address register with said offset stored in said selected register.
Claim 3
Dependent Claim
13 words
The method of claim 1, wherein said offset includes a 16-bit memory address.
Claim 4
Dependent Claim
19 words
The method of claim 2, wherein said combining said segment address with said offset generates a 20-bit memory address.
Claim 5
Independent Claim
195 words
A system for developing compiled computer code, the system comprising: a computer having a processor and a memory, said memory including a plurality of memory segments, and said processor including a data segment register for addressing a memory segment storing data; a compiler for generating computer code from source listings, said source listings including definitions of classes of objects having data members and methods operative on said data members, said source listings also including declarations of objects from said classes, whereby an object inherits data members and methods from at least one class; means, operably coupled to said compiler, for instructing said processor to create at least one object from said at least one class by storing data members of said at least one object in a single segment of the memory and loading said data segment register with a segment address of said single segment, said data members being stored at an offset in said single segment; and means, operably coupled to said compiler, for instructing said processor to access said stored data members of said at least one object by combining said segment address loaded in said data segment register with said offset.
Claim 6
Independent Claim
195 words
A system for developing compiled computer code, the system comprising: a computer having a processor and a memory, said memory including a plurality of memory segments, and said processor including a data segment register for addressing a memory segment storing data; a compiler for generating computer code from source listings, said source listings including definitions of classes of objects having data members and methods operative on said data members, said source listings also including declarations of objects from said classes, whereby an object inherits data members and methods from at least one class; means, operably coupled to said compiler, for instructing said processor to create at least one object from said at least one class by storing data members of said at least one object in a single segment of the memory and loading said data segment register with a segment address of said single segment, said data members being stored at an offset in said single segment; and means, operably coupled to said compiler, for instructing said processor to access said stored data members of said at least one object by combining said segment address loaded in said data segment register with said offset.
Claim 7
Dependent Claim
71 words
The system of claim 4, wherein said processor further comprises an indexing register for storing said offset within said single segment, and wherein said system further comprises means, operably coupled to said compiler, for instructing said processor to access said data members of said at least one object with a segment/offset address formed from said segment address stored in said data segment register and said offset stored in said indexing register.
Claim 8
Dependent Claim
41 words
The system of claim 5, further comprising means, operably coupled to said compiler, for instructing said processor to access said methods of said at least one object with said segment/offset address formed from said data segment register and said indexing register.
Claim 9
Dependent Claim
55 words
The system of claim 5, wherein said processor is an Intel 80×86-compatible processor, said data segment register is an 80×86 data segment (DS) register, and said indexing register is an 80×86 source index (SI) register, so that access to data members of said at least one object is provided by a DS:SI register pair address.
Claim 10
Dependent Claim
73 words
The system of claim 5, wherein said processor is an Intel 80×86-compatible processor, and said indexing register is a selected one of a group comprising an 80×86 source index (SI) register, an 80×86 destination index (DI) register, and an 80×86 base (BX) register, so that access to said at least one object is provided by forming a segment/offset address by combining said data segment register with an indexing register selected from said group.
Claim 11
Dependent Claim
187 words
In a system for compiling source listings into code for operating a computer, said computer including a processor and a memory, said source listings comprising C++ objects instantiated from C++ classes having C++ data members and C++ methods operative on said data members, an improved method for accessing said data members, the method comprising: (a) allocating a region from said memory as a default data segment, said default data segment being located in said memory at a particular segment address; (b) storing said C++ data members of said C++ objects in said default data segment, said C++ data members residing at an offset in said default data segment; (c) storing said particular segment address of said default data segment in a segment register of said processor, so that references to said C++ data members in said C++ source listings comprise near addresses, said near addresses including an implicit segment address to said default data segment; and (d) accessing said C++ data members during runtime execution of said C++ methods by combining said segment address of said default data segment stored in said segment register with said offset.
Claim 12
Dependent Claim
187 words
In a system for compiling source listings into code for operating a computer, said computer including a processor and a memory, said source listings comprising C++ objects instantiated from C++ classes having C++ data members and C++ methods operative on said data members, an improved method for accessing said data members, the method comprising: (a) allocating a region from said memory as a default data segment, said default data segment being located in said memory at a particular segment address; (b) storing said C++ data members of said C++ objects in said default data segment, said C++ data members residing at an offset in said default data segment; (c) storing said particular segment address of said default data segment in a segment register of said processor, so that references to said C++ data members in said C++ source listings comprise near addresses, said near addresses including an implicit segment address to said default data segment; and (d) accessing said C++ data members during runtime execution of said C++ methods by combining said segment address of said default data segment stored in said segment register with said offset.
Claim 13
Dependent Claim
98 words
The method of claim 9, further comprising: (e) storing a table of memory addresses in said default data segment of the memory, said table storing a function pointer for each of said C++ methods; and (f) during runtime execution of said C++ methods, invoking a particular C++ method by executing processor instructions stored at a memory location pointed to by the function pointer for the particular C++ method, said function pointer for the particular C++ method being accessed at runtime by combining said segment address of said default data segment stored in said segment register with said offset.
Claim 14
Dependent Claim
35 words
The method of claim 9, wherein said processor comprises an 80×86-compatible microprocessor and wherein step (c) includes: storing said particular segment address of said default data segment in a DS segment register of the processor.
Claim 15
Dependent Claim
69 words
The method of claim 9, wherein step (d) includes forming an address for a particular C++ data member being accessed by: storing said offset in an index register of said processor; and forming an address for said particular C++ data member by combining said segment address stored in said segment register, said offset address stored in said index register, and a particular offset for said particular C++ data member.
Claim 16
Dependent Claim
100 words
A computer program stored on a computer readable medium, comprising: code that receives object-oriented source code listings, said source code listings including a declaration of an object that is a member of a class, said declaration specifying data members of said object; code that stores said object including said data members at a first offset within a default data segment, wherein a data segment addressing register specifies a location of said default data segment; and code that accesses said data members of said object in said default data segment by combining said data segment addressing register with said first offset.
Claim 17
Dependent Claim
100 words
A computer program stored on a computer readable medium, comprising: code that receives object-oriented source code listings, said source code listings including a declaration of an object that is a member of a class, said declaration specifying data members of said object; code that stores said object including said data members at a first offset within a default data segment, wherein a data segment addressing register specifies a location of said default data segment; and code that accesses said data members of said object in said default data segment by combining said data segment addressing register with said first offset.
Claim 18
Dependent Claim
40 words
The computer program of claim 13, wherein a specific data member is accessed by combining said data segment addressing register, said first offset, and a second offset of said specific data member within said object in said default data segment.
Claim 19
Dependent Claim
18 words
The computer program of claim 13, wherein said declaration further specifies methods of said at least one object.
Claim 20
Dependent Claim
37 words
The computer program of claim 15, further comprising code that stores a table in said default data segment, said table including a second offset of each of said methods within said object in said default data segment.
Claim 21
Dependent Claim
42 words
The computer program of claim 16, further comprising code that invokes a specific method by executing instructions at a location indicated by combining said data segment addressing register, said first offset, and said second offset in said table for said specific method.
Claim 22
Dependent Claim
23 words
The computer program of claim 13, wherein said data segment addressing register is a data segment (DS) register in an Intel 80×86-compatible processor.
Claim 23
Dependent Claim
41 words
The computer program of claim 18, wherein said first offset is stored in a first register, wherein said first register is a source index (SI) register, a destination index (DI) register or a base (BX) register in an Intel 80×86-compatible processor.
References Cited (Backward Citations)
US5093914A
Cited
US5265206A
Cited
US5339438A
Cited
US5361350A
Cited
US5371891A
Cited
US5327562A
Cited
US5481708A
Cited
USPTO Annuity & Maintenance Windows
| Annuity Stage | Window Opens | Payment Deadline | Surcharge Period Until | Estimated Fee | Status |
|---|---|---|---|---|---|
| 3.5 Years (Year 4) | 1999-07-09 | 2000-01-08 | 2000-07-09 | $2000.00 | Window Closed / Lapsed |
| 7.5 Years (Year 8) | 2003-07-09 | 2004-01-08 | 2004-07-09 | $3760.00 | Window Closed / Lapsed |
| 11.5 Years (Year 12) | 2007-07-09 | 2008-01-08 | 2008-07-09 | $7700.00 | Window Closed / Lapsed |