Obtenga el inicio y el final de los segmentos de proceso C / C ++

Necesito obtener la dirección inicial y final de los siguientes segmentos del proceso: código, datos, pila, entorno. Entiendo cómo se encuentra en la memoria, pero no sé cómo obtenerlo usando llamadas api u otra cosa. He encontrado cómo comenzar algunos segmentos usando este código

#include <stdio.h>

int temp_data = 100;
static int temp_bss;

void print_addr ( void )
{
        int local_var = 100;
        int *code_segment_address = ( int* ) &print_addr;
        int *data_segment_address = &temp_data;
        int *bss_address = &temp_bss;
        int *stack_segment_address = &local_var;

        printf ( "\nAddress of various segments:" );
        printf ( "\n\tCode Segment : %p" , code_segment_address );
        printf ( "\n\tData Segment : %p" , data_segment_address );
        printf ( "\n\tBSS : %p" , bss_address );
        printf ( "\n\tStack Segment : %p\n" , stack_segment_address );

}

int main ( )
{
        print_addr ();
        return 0;
}

Pero no sé cómo encontrar el final de cada segmento. Solo tengo una idea es que el final de un segmento es el comienzo de otro segmento. Por favor explique cómo puedo hacer esto usando C y linux API.

Respuestas a la pregunta(4)

Su respuesta a la pregunta