پرش به محتوا

آبجکت کد

از ویکی‌پدیا، دانشنامهٔ آزاد
(تغییرمسیر از کد هدف)

آبجکت کد (به انگلیسی: Object code) یا کد هدف، کدی است که مترجم یا اسمبلر آن را تولید می‌کند و در واقع مجموعه دستورالعملهایی به زبان ماشین (به صورت ۰ و ۱) یا یک زبان واسط (برای مثال زبان انتقال ثبات) است.

برای استفاده از کد آبجکت، باید آن را در یک فایل اجرایی، فایل کتابخانه، یا یک آبجکت فایل قرار داد. برای تبدیل فایل آبجکت به فایل قابل اجرا یا فایل باینری از پیوندده استفاده می‌شود.

مراحل تبدیل کد منبع به فایل اجرایی

[ویرایش]

۱. ترجمه (Compilation / Assembly)

[ویرایش]
  • در این مرحله، کد منبع (مثلاً به زبان‌های C++، C، یا اسمبلی) به کد آبجکت تبدیل می‌شود.
  • هر فایل .c یا .cpp پس از کامپایل به یک فایل .o یا .obj تبدیل می‌شود.
  • در زبان‌های سطح پایین‌تر مانند اسمبلی، اسمبلر این کار را انجام می‌دهد و خروجی آن نیز یک فایل آبجکت است.

۲. پیوند (Linking)

[ویرایش]
  • فایل‌های آبجکت به همراه کتابخانه‌های استاندارد یا کتابخانه‌های خارجی توسط لینکر (Linker) ترکیب می‌شوند.
  • خروجی این مرحله یک فایل اجرایی است که می‌تواند روی سیستم‌عامل اجرا شود.

۳. بارگذاری و اجرا (Loading & Execution)

[ویرایش]
  • پس از لینک شدن، فایل اجرایی در حافظه بارگذاری شده و پردازنده آن را اجرا می‌کند.

چرا از کد آبجکت استفاده می‌شود؟

[ویرایش]

۱. افزایش ماژولار بودن کد

[ویرایش]

برنامه‌های بزرگ به چندین فایل تقسیم می‌شوند. هر فایل جداگانه کامپایل شده و به یک فایل آبجکت تبدیل می‌شود. در نهایت، این فایل‌ها در مرحله لینکینگ به یکدیگر متصل می‌شوند.

۲. بهینه‌سازی و به‌کارگیری کتابخانه‌ها

[ویرایش]
  • بسیاری از کتابخانه‌های سیستم، مانند libc در لینوکس، به‌صورت فایل‌های آبجکت از پیش کامپایل‌شده در اختیار برنامه‌ها قرار می‌گیرند.
  • این موضوع باعث کاهش حجم برنامه و بهینه‌سازی زمان کامپایل می‌شود.

۳. امکان استفاده از چندین زبان در یک پروژه

[ویرایش]
  • برخی پروژه‌ها شامل کدهای نوشته‌شده در زبان‌های مختلف هستند.
  • مثلاً بخشی از برنامه به زبان C و بخشی دیگر به اسمبلی نوشته شده است.
  • از آنجایی که خروجی هر دو زبان یک فایل آبجکت است، لینک‌کننده می‌تواند آن‌ها را ترکیب کند.

ساختار یک فایل آبجکت

[ویرایش]

یک فایل آبجکت معمولاً شامل بخش‌های زیر است:

  1. کد ماشین (Machine Code): شامل دستورالعمل‌های پردازنده.
  2. جدول نمادها (Symbol Table): شامل نام توابع و متغیرهای تعریف‌شده در فایل.
  3. بخش داده‌ها (Data Section): شامل داده‌های موردنیاز برنامه.
  4. اطلاعات مربوط به رفع ابهام (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 در ویندوز.
  • به‌عنوان کتابخانه‌های دینامیکی در زمان اجرا بارگذاری می‌شوند.

کد آبجکت یکی از مراحل مهم در تبدیل کد منبع به یک فایل اجرایی است. این مرحله باعث افزایش کارایی، ماژولار بودن کد، و امکان استفاده از چندین زبان برنامه‌نویسی در یک پروژه می‌شود. بدون مفهوم کد آبجکت، مدیریت پروژه‌های بزرگ نرم‌افزاری بسیار دشوار می‌شد.

منابع

[ویرایش]