İşlem Resmi

Artık sürecin ve onun ana sürecinin temel bilgilerini nasıl elde edeceğimizi gördüğümüze göre, süreç / program bilgilerinin ayrıntılarına bakmanın zamanı geldi.

Süreç görüntüsü tam olarak nedir? İşlem görüntüsü, programı çalıştırırken gerekli olan yürütülebilir bir dosyadır. Bu görüntü genellikle aşağıdaki bölümleri içerir -

  • Kod parçası veya metin parçası
  • Veri segmenti
  • Yığın segmenti
  • Yığın segmenti

İşlem görüntüsünün resimli gösterimi aşağıdadır.

Code segmentnesne dosyasının veya programın sanal adres alanının yürütülebilir talimatlardan oluşan bir bölümüdür. Bu genellikle salt okunur veri segmentidir ve sabit bir boyuta sahiptir.

Veri segmenti iki türdendir.

  • Initialized
  • Un-initialized

Initialized data segment nesne dosyasının veya programın sanal adres alanının başlatılmış statik ve global değişkenlerden oluşan bir bölümüdür.

Un-initialized data segmentnesne dosyasının veya programın sanal adres alanının başlatılmamış statik ve global değişkenlerden oluşan bir bölümüdür. Başlatılmamış veri segmenti, BSS (Sembolle Başlatılan Blok) segmenti olarak da adlandırılır.

Data segmentokuma-yazmadır, çünkü değişkenlerin değerleri çalışma süresi boyunca değiştirilebilir. Bu segment ayrıca sabit bir boyuta sahiptir.

Stack segmentotomatik değişkenler ve fonksiyon parametreleri için ayrılmış bir hafıza alanıdır. Ayrıca, işlev çağrılarını yürütürken bir dönüş adresi depolar. Yığın, yerel veya otomatik değişkenleri, işlev parametrelerini ve sonraki adresi veya dönüş adresini depolamak için LIFO (Son Giren İlk Çıkar) mekanizmasını kullanır. İade adresi, işlevin yürütülmesi tamamlandıktan sonra dönülecek adresi ifade eder. Bu segment boyutu, yerel değişkenler, fonksiyon parametreleri ve fonksiyon çağrılarına göre değişkendir. Bu segment daha yüksek bir adresten daha düşük bir adrese doğru büyür.

Heap segmentmalloc () ve calloc () çağrıları gibi dinamik bellek depolaması için ayrılan bellek alanıdır. Bu segment boyutu, kullanıcı tahsisine göre de değişkendir. Bu segment daha düşük bir adresten daha yüksek bir adrese doğru büyür.

Şimdi segmentlerin (veri ve bss segmentleri) boyutunun birkaç örnek programla nasıl değiştiğini kontrol edelim. Segment boyutu, "boyut" komutunun çalıştırılmasıyla bilinir.

Başlangıç ​​programı

Dosya: segment_size1.c

#include<stdio.h>

int main() {
   printf("Hello World\n");
   return 0;
}

Aşağıdaki programda, başlatılmamış bir statik değişken eklenmiştir. Bu, başlatılmamış segment (BSS) boyutunun 4 Bayt artacağı anlamına gelir.Note- Linux işletim sisteminde int boyutu 4 bayttır. Tamsayı veri türünün boyutu, derleyiciye ve işletim sistemi desteğine bağlıdır.

Dosya: segment_size2.c

#include<stdio.h>

int main() {
   static int mystaticint1;
   printf("Hello World\n");
   return 0;
}

Aşağıdaki programda, başlatılmış bir statik değişken eklenir. Bu, başlatılan segment (DATA) boyutunun 4 Bayt artacağı anlamına gelir.

Dosya: segment_size3.c

#include<stdio.h>

int main() {
   static int mystaticint1;
   static int mystaticint2 = 100;
   printf("Hello World\n");
   return 0;
}

Aşağıdaki programda, başlatılmış bir global değişken eklenir. Bu, başlatılan segment (DATA) boyutunun 4 Bayt artacağı anlamına gelir.

Dosya: segment_size4.c

#include<stdio.h>

int myglobalint1 = 500;
int main() {
   static int mystaticint1;
   static int mystaticint2 = 100;
   printf("Hello World\n");
   return 0;
}

Aşağıdaki programda, başlatılmamış bir global değişken eklenmiştir. Bu, başlatılmamış segment (BSS) boyutunun 4 Bayt artacağı anlamına gelir.

Dosya: segment_size5.c

#include<stdio.h>

int myglobalint1 = 500;
int myglobalint2;
int main() {
   static int mystaticint1;
   static int mystaticint2 = 100;
   printf("Hello World\n");
   return 0;
}

Yürütme Adımları

Derleme

babukrishnam $ gcc segment_size1.c -o segment_size1
babukrishnam $ gcc segment_size2.c -o segment_size2
babukrishnam $ gcc segment_size3.c -o segment_size3
babukrishnam $ gcc segment_size4.c -o segment_size4
babukrishnam $ gcc segment_size5.c -o segment_size5

Yürütme / Çıktı

babukrishnam size segment_size1 segment_size2 segment_size3 segment_size4 segment_size5
   text  data  bss  dec  hex  filename
   878   252    8   1138 472  segment_size1 
   878   252   12   1142 476  segment_size2 
   878   256   12   1146 47a  segment_size3 
   878   260   12   1150 47e  segment_size4 
   878   260   16   1154 482  segment_size5
babukrishnam