Xử lý hình ảnh

Bây giờ chúng ta đã biết cách lấy thông tin cơ bản của tiến trình và quy trình mẹ của nó, đã đến lúc xem xét chi tiết về thông tin quy trình / chương trình.

Hình ảnh quy trình chính xác là gì? Hình ảnh quy trình là tệp thực thi được yêu cầu trong khi thực hiện chương trình. Hình ảnh này thường chứa các phần sau:

  • Đoạn mã hoặc đoạn văn bản
  • Phân đoạn dữ liệu
  • Phân đoạn ngăn xếp
  • Phân đoạn đống

Sau đây là biểu diễn bằng hình ảnh của quá trình.

Code segmentlà một phần của tệp đối tượng hoặc không gian địa chỉ ảo của chương trình chứa các lệnh thực thi. Đây thường là phân đoạn dữ liệu chỉ đọc và có kích thước cố định.

Phân đoạn dữ liệu có hai loại.

  • Initialized
  • Un-initialized

Initialized data segment là một phần của tệp đối tượng hoặc không gian địa chỉ ảo của chương trình bao gồm các biến tĩnh và toàn cục được khởi tạo.

Un-initialized data segmentlà một phần của tệp đối tượng hoặc không gian địa chỉ ảo của chương trình bao gồm các biến tĩnh và toàn cục chưa được khởi tạo. Đoạn dữ liệu chưa khởi tạo còn được gọi là đoạn BSS (Block Started by Symbol).

Data segmentlà đọc-ghi, vì giá trị của các biến có thể được thay đổi trong thời gian chạy. Phân khúc này cũng có kích thước cố định.

Stack segmentlà một vùng bộ nhớ được phân bổ cho các biến tự động và các tham số hàm. Nó cũng lưu trữ một địa chỉ trả về trong khi thực hiện các lệnh gọi hàm. Stack sử dụng cơ chế LIFO (Last-In-First-Out) để lưu trữ các biến cục bộ hoặc tự động, các tham số hàm và lưu trữ địa chỉ tiếp theo hoặc địa chỉ trả về. Địa chỉ trả về đề cập đến địa chỉ trả về sau khi hoàn thành việc thực thi chức năng. Kích thước phân đoạn này có thể thay đổi theo các biến cục bộ, tham số hàm và lệnh gọi hàm. Phân khúc này phát triển từ địa chỉ cao hơn đến địa chỉ thấp hơn.

Heap segmentlà vùng bộ nhớ được phân bổ để lưu trữ bộ nhớ động chẳng hạn như cho các lệnh gọi malloc () và calloc (). Kích thước phân khúc này cũng có thể thay đổi theo phân bổ của người dùng. Phân khúc này phát triển từ địa chỉ thấp hơn đến địa chỉ cao hơn.

Bây giờ chúng ta hãy kiểm tra kích thước các phân đoạn (phân đoạn dữ liệu và bss) thay đổi như thế nào với một vài chương trình mẫu. Kích thước phân đoạn được biết bằng cách thực hiện lệnh “size”.

Chương trình ban đầu

Tệp: segment_size1.c

#include<stdio.h>

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

Trong chương trình sau, một biến tĩnh chưa được khởi tạo được thêm vào. Điều này có nghĩa là kích thước phân đoạn chưa được khởi tạo (BSS) sẽ tăng thêm 4 Byte.Note- Trong hệ điều hành Linux, kích thước của int là 4 byte. Kích thước của kiểu dữ liệu số nguyên phụ thuộc vào trình biên dịch và hỗ trợ hệ điều hành.

Tệp: segment_size2.c

#include<stdio.h>

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

Trong chương trình sau, một biến tĩnh đã khởi tạo được thêm vào. Điều này có nghĩa là kích thước phân đoạn được khởi tạo (DATA) sẽ tăng thêm 4 Byte.

Tệp: segment_size3.c

#include<stdio.h>

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

Trong chương trình sau, một biến toàn cục đã khởi tạo được thêm vào. Điều này có nghĩa là kích thước phân đoạn được khởi tạo (DATA) sẽ tăng thêm 4 Byte.

Tệp: segment_size4.c

#include<stdio.h>

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

Trong chương trình sau, một biến toàn cục chưa khởi tạo được thêm vào. Điều này có nghĩa là kích thước phân đoạn chưa được khởi tạo (BSS) sẽ tăng thêm 4 Byte.

Tệp: 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;
}

Các bước thực hiện

Tổng hợp

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

Thực thi / Đầu ra

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