_end, _etext, or _edata Identifier

Purpose

Define the first addresses following the program, initialized data, and all data.

Syntax

extern _end;
extern _etext;
extern _edata;

Description

The external names _end, _etext, and _edata are defined by the loader for all programs. They are not subroutines but identifiers associated with the following addresses:

Item Description
_etext The first address following the program text.
_edata The first address following the initialized data region.
_end The first address following the data region that is not initialized. The name end (with no underscore) defines the same address as does _end (with underscore).

The break value of the program is the first location beyond the data. When a program begins running, this location coincides with end. However, many factors can change the break value, including:

  • The brk or sbrk subroutine
  • The malloc subroutine
  • The standard I/O subroutines
  • The -p flag with the cc command

Therefore, use the brk or sbrk(0) subroutine, not the end address, to determine the break value of the program.