end(3) Library Functions Manual end(3)

etext, edata, end - sfârșitul segmentelor de program

extern etext;
extern edata;
extern end;

Adresele acestor simboluri indică sfârșitul diferitelor segmente de program:

Aceasta este prima adresă după sfârșitul segmentului de text (codul programului).
Aceasta este prima adresă după sfârșitul segmentului de date inițializat.
Aceasta este prima adresă după sfârșitul segmentului de date neinițializate (cunoscut și sub numele de segment BSS).

Niciunul.

Deși aceste simboluri sunt furnizate de mult timp în majoritatea sistemelor UNIX, ele nu sunt standardizate; utilizați-le cu prudență.

Programul trebuie să declare în mod explicit aceste simboluri; ele nu sunt definite în niciun fișier antet.

În unele sisteme, numele acestor simboluri sunt precedate de caractere de subliniere, astfel: _etext, _edata și _end. Aceste simboluri sunt, de asemenea, definite pentru programele compilate în Linux.

La începutul execuției programului, întreruperea programului se va afla undeva în apropierea lui &end (poate la începutul paginii următoare). Cu toate acestea, întreruperea se va schimba pe măsură ce memoria este alocată prin brk(2) sau malloc(3). Utilizați sbrk(2) cu un argument de zero pentru a afla valoarea curentă a întreruperii programului.

Atunci când este rulat, programul de mai jos produce un rezultat precum cel care urmează:


$ ./a.out
Prima adresă după:
    textul programului (etext)    0x8048568
    datele inițializate (edata)   0x804a01c
    datele neinițializate (end)   0x804a024

#include <stdio.h>
#include <stdlib.h>
extern char etext, edata, end; /* Simbolurile trebuie să fie de un anumit tip,
                                  sau «gcc -Wall» se va plânge */
int
main(void)
{
    printf("Prima adresă după:\n");
    printf("    textul programului (etext)   %10p\n", &etext);
    printf("    datele inițializate (edata)  %10p\n", &edata);
    printf("    datele neinițializate (end)  %10p\n", &end);
    exit(EXIT_SUCCESS);
}

objdump(1), readelf(1), sbrk(2), elf(5)

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

31 octombrie 2023 Pagini de manual de Linux 6.06