in

Imagen de proceso

process image

Ahora que hemos visto cómo obtener la información básica del proceso y su proceso principal, es hora de examinar los detalles de la información del proceso / programa.

¿Qué es exactamente la imagen de proceso? La imagen de proceso es un archivo ejecutable necesario al ejecutar el programa. Esta imagen generalmente contiene las siguientes secciones:

  • Segmento de código o segmento de texto
  • Segmento de datos
  • Segmento de pila
  • Segmento de montón

A continuación se muestra la representación pictórica de la imagen del proceso.

Procesar imágenes

Segmento de código es una parte del espacio de direcciones virtuales del programa o archivo de objeto que consta de instrucciones ejecutables. Suele ser un segmento de datos de solo lectura y tiene un tamaño fijo.

El segmento de datos es de dos tipos.

  • Inicializado
  • Sin inicializar

Segmento de datos inicializado es una parte del archivo de objeto o del espacio de direcciones virtuales del programa que consta de variables estáticas y globales inicializadas.

Segmento de datos sin inicializar es una parte del archivo de objeto o del espacio de direcciones virtuales del programa que consta de variables estáticas y globales no inicializadas. El segmento de datos no inicializado también se denomina segmento BSS (bloque iniciado por símbolo).

Segmento de datos es de lectura-escritura, ya que los valores de las variables se pueden cambiar durante el tiempo de ejecución. Este segmento también tiene un tamaño fijo.

Segmento de pila es un área de memoria asignada para variables automáticas y parámetros de función. También almacena una dirección de retorno mientras ejecuta llamadas a funciones. Stack utiliza el mecanismo LIFO (Last-In-First-Out) para almacenar variables locales o automáticas, parámetros de función y almacenar la siguiente dirección o dirección de retorno. La dirección de retorno se refiere a la dirección a la que se debe devolver una vez completada la ejecución de la función. El tamaño de este segmento es variable según las variables locales, los parámetros de función y las llamadas de función. Este segmento crece de una dirección más alta a una dirección más baja.

Segmento de montón es un área de memoria asignada para el almacenamiento de memoria dinámica, como para llamadas a malloc () y calloc (). Este tamaño de segmento también es variable según la asignación de usuarios. Este segmento crece de una dirección más baja a una dirección más alta.

Veamos ahora cómo varía el tamaño de los segmentos (segmentos de datos y bss) con algunos programas de muestra. El tamaño del segmento se conoce ejecutando el comando «tamaño».

Programa inicial

Archivo: segmento_size1.c

#include<stdio.h>

int main() {
   printf("Hello Worldn");
   return 0;
}

En el siguiente programa, se agrega una variable estática no inicializada. Esto significa que el tamaño del segmento no inicializado (BSS) aumentaría en 4 bytes. Nota – En el sistema operativo Linux, el tamaño de int es 4 bytes. El tamaño del tipo de datos enteros depende del compilador y del soporte del sistema operativo.

Archivo: segmento_size2.c

#include<stdio.h>

int main() {
   static int mystaticint1;
   printf("Hello Worldn");
   return 0;
}

En el siguiente programa, se agrega una variable estática inicializada. Esto significa que el tamaño del segmento inicializado (DATOS) aumentaría en 4 bytes.

Archivo: segmento_size3.c

#include<stdio.h>

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

En el siguiente programa, se agrega una variable global inicializada. Esto significa que el tamaño del segmento inicializado (DATOS) aumentaría en 4 bytes.

Archivo: segmento_size4.c

#include<stdio.h>

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

En el siguiente programa, se agrega una variable global no inicializada. Esto significa que el tamaño del segmento no inicializado (BSS) aumentaría en 4 bytes.

Archivo: segmento_size5.c

#include<stdio.h>

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

Pasos de ejecución

Compilacion

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

Ejecución / Salida

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

personas videollamada grupal smartphone

¿Cómo descargo y uso HouseParty en mi PC con Windows o Mac?

apple touch icon@2

c #: respuesta RequestEntityTooLarge de Web Api al intentar cargar un archivo con HttpClient