侧边栏壁纸
博主头像
noerror

虚灵不寐,众理具而万事出。

  • 累计撰写 239 篇文章
  • 累计创建 9 个标签
  • 累计收到 2 条评论
标签搜索

目 录CONTENT

文章目录

end函数用法详解

noerror
2022-11-08 / 0 评论 / 0 点赞 / 302 阅读 / 438 字 / 正在检测是否收录...

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);
}
0

评论区