end函数用法详解
end函数简介
- 头文件包含
- 函数定义
extern etext ;
extern edata ;
extern end ;
end函数常见使用错误
- 编译错误
warning: implicit declaration of function ‘end’ [-Wimplicit-function-declaration]
解决办法:包含头文件
end函数详细描述
这些符号的地址表示各种节目段的结束:
- etext这是文本段(程序代码)末尾之后的第一个地址。
- edata这是初始化数据段结束后的第一个地址。
- end这是超过未初始化数据段(也称为BSS段)末尾的第一个地址。
end函数其他说明
程序必须显式声明这些符号;它们不在任何头文件中定义。
在某些系统上,这些符号的名称前面有下划线,因此:_etext 、_edata 和_end 这些符号也是为在Linux上编译的程序定义的。
在程序执行开始时,程序中断将在&end附近的某个地方(可能在下一页的开头)。但是,当通过brk (2)或malloc (3)分配内存时,中断会发生变化。使用参数为零的sbrk (2)来查找程序中断的当前值。
end函数使用举例
运行时,下面的程序将生成如下输出:
" ./a.out"
First address past:
program text (etext) 0x8048568
initialized data (edata) 0x804a01c
uninitialized data (end) 0x804a024
Program source&
#include <stdio.h>
#include <stdlib.h>
extern char etext, edata, end; /* The symbols must have some type,
or "gcc \-Wall" complains */
int
main(int argc, char *argv[])
{
printf("First address past:\en");
printf(" program text (etext) %10p\en", &etext);
printf(" initialized data (edata) %10p\en", &edata);
printf(" uninitialized data (end) %10p\en", &end);
exit(EXIT_SUCCESS);
}
评论区