آبجکت کد
| اجرای برنامه |
|---|
| مفاهیم عمومی |
| انواع کد |
| راهبردهای کامپایل |
|
| زمان اجرای قابل ذکر |
|
| کامپایلرها و زنجیرابزارهای قابل ذکر |
آبجکت کد (به انگلیسی: Object code) یا کد هدف، کدی است که مترجم یا اسمبلر آن را تولید میکند و در واقع مجموعه دستورالعملهایی به زبان ماشین (به صورت ۰ و ۱) یا یک زبان واسط (برای مثال زبان انتقال ثبات) است.
برای استفاده از کد آبجکت، باید آن را در یک فایل اجرایی، فایل کتابخانه، یا یک آبجکت فایل قرار داد. برای تبدیل فایل آبجکت به فایل قابل اجرا یا فایل باینری از پیوندده استفاده میشود.
مراحل تبدیل کد منبع به فایل اجرایی
[ویرایش | اشتراکگذاری]۱. ترجمه (Compilation / Assembly)
[ویرایش | اشتراکگذاری]- در این مرحله، کد منبع (مثلاً به زبانهای C++، C، یا اسمبلی) به کد آبجکت تبدیل میشود.
- هر فایل
.cیا.cppپس از کامپایل به یک فایل.oیا.objتبدیل میشود. - در زبانهای سطح پایینتر مانند اسمبلی، اسمبلر این کار را انجام میدهد و خروجی آن نیز یک فایل آبجکت است.
۲. پیوند (Linking)
[ویرایش | اشتراکگذاری]- فایلهای آبجکت به همراه کتابخانههای استاندارد یا کتابخانههای خارجی توسط لینکر (Linker) ترکیب میشوند.
- خروجی این مرحله یک فایل اجرایی است که میتواند روی سیستمعامل اجرا شود.
۳. بارگذاری و اجرا (Loading & Execution)
[ویرایش | اشتراکگذاری]- پس از لینک شدن، فایل اجرایی در حافظه بارگذاری شده و پردازنده آن را اجرا میکند.
چرا از کد آبجکت استفاده میشود؟
[ویرایش | اشتراکگذاری]۱. افزایش ماژولار بودن کد
[ویرایش | اشتراکگذاری]برنامههای بزرگ به چندین فایل تقسیم میشوند. هر فایل جداگانه کامپایل شده و به یک فایل آبجکت تبدیل میشود. در نهایت، این فایلها در مرحله لینکینگ به یکدیگر متصل میشوند.
۲. بهینهسازی و بهکارگیری کتابخانهها
[ویرایش | اشتراکگذاری]- بسیاری از کتابخانههای سیستم، مانند
libcدر لینوکس، بهصورت فایلهای آبجکت از پیش کامپایلشده در اختیار برنامهها قرار میگیرند. - این موضوع باعث کاهش حجم برنامه و بهینهسازی زمان کامپایل میشود.
۳. امکان استفاده از چندین زبان در یک پروژه
[ویرایش | اشتراکگذاری]- برخی پروژهها شامل کدهای نوشتهشده در زبانهای مختلف هستند.
- مثلاً بخشی از برنامه به زبان C و بخشی دیگر به اسمبلی نوشته شده است.
- از آنجایی که خروجی هر دو زبان یک فایل آبجکت است، لینککننده میتواند آنها را ترکیب کند.
ساختار یک فایل آبجکت
[ویرایش | اشتراکگذاری]یک فایل آبجکت معمولاً شامل بخشهای زیر است:
- کد ماشین (Machine Code): شامل دستورالعملهای پردازنده.
- جدول نمادها (Symbol Table): شامل نام توابع و متغیرهای تعریفشده در فایل.
- بخش دادهها (Data Section): شامل دادههای موردنیاز برنامه.
- اطلاعات مربوط به رفع ابهام (Relocation Information): مشخص میکند که آدرسهای حافظه هنگام لینک شدن چگونه تنظیم شوند.
مثال عملی از تولید کد آبجکت
[ویرایش | اشتراکگذاری]
فرض کنید فایلی به نام main.c داریم:
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
کامپایل و تولید فایل آبجکت در لینوکس
[ویرایش | اشتراکگذاری]با اجرای دستور زیر در ترمینال:
gcc -c main.c -o main.o
یک فایل آبجکت به نام main.o تولید میشود. این فایل هنوز قابل اجرا نیست.
لینک کردن فایل آبجکت و تولید فایل اجرایی
[ویرایش | اشتراکگذاری]
برای تبدیل main.o به یک فایل اجرایی، دستور زیر را اجرا میکنیم:
gcc main.o -o main
حال فایل main یک فایل اجرایی است که میتوان آن را اجرا کرد:
./main
خروجی:
Hello, World!
انواع فایلهای آبجکت
[ویرایش | اشتراکگذاری]۱. Relocatable Object Files (قابل جابهجایی):
- این فایلها بعداً توسط لینککننده ترکیب میشوند.
- خروجی دستور
gcc -cاز این نوع است.
۲. Executable Object Files (اجرایی):
- این فایلها کاملاً لینک شده و آماده اجرا هستند.
- خروجی نهایی کامپایلر پس از لینک شدن.
۳. Shared Object Files (کتابخانههای مشترک):
- فایلهای
.soدر لینوکس و.dllدر ویندوز. - بهعنوان کتابخانههای دینامیکی در زمان اجرا بارگذاری میشوند.
کد آبجکت یکی از مراحل مهم در تبدیل کد منبع به یک فایل اجرایی است. این مرحله باعث افزایش کارایی، ماژولار بودن کد، و امکان استفاده از چندین زبان برنامهنویسی در یک پروژه میشود. بدون مفهوم کد آبجکت، مدیریت پروژههای بزرگ نرمافزاری بسیار دشوار میشد.
منابع
[ویرایش | اشتراکگذاری]- مشارکتکنندگان ویکیپدیا. «Object code». در دانشنامهٔ ویکیپدیای انگلیسی، بازبینیشده در ۲۰ شهریور ۱۳۹۲.