Other Alias
etext, edataОБЗОР
extern etext;
extern edata;
extern end;
ОПИСАНИЕ
Адреса этих символов соответствуют концам различных программных сегментов:- etext
- Первый адрес за концом сегмента текста (кода программы).
- edata
- Первый адрес за концом сегмента инициализированных данных.
- end
- Первый адрес за концом сегмента неинициализированных данных (сегмента BSS).
СООТВЕТСТВИЕ СТАНДАРТАМ
Хотя эти символы уже давно присутствуют в большинстве систем UNIX, они не стандартизованы. Используйте осторожно.ЗАМЕЧАНИЯ
Программа должна явно объявлять эти символы; они не определены в заголовочных файлах.В некоторых системах имена этих символов начинаются с подчёркивания: _etext, _edata и _end. Эти символы также определены в программах, скомпонованных на Linux.
В начале выполнения программы, повреждение программы будет где-нибудь рядом c &end (возможно, в начале следующей страницы). Однако, поломка изменяет память как при выделении с помощью brk(2) или malloc(3). Используйте sbrk(2) с аргументом 0 для поиска текущего значения поломки программы.
ПРИМЕР
Нижеследующая программа выдает такие результаты:$ ./a.out First address past: program text (etext) 0x8048568 initialized data (edata) 0x804a01c uninitialized data (end) 0x804a024
Исходный код программы
#include <stdio.h> #include <stdlib.h> extern char etext, edata, end; /* Символы должны иметь какой-то тип, иначе предупреждения от «gcc -Wall» */ int main(int argc, char *argv[]) { printf("First address past:\n"); printf(" program text (etext) %10p\n", &etext); printf(" initialized data (edata) %10p\n", &edata); printf(" uninitialized data (end) %10p\n", &end); exit(EXIT_SUCCESS); }