赞
踩
使用 man 3 end
可以看到相关符号的解释
这些符号不是在 C 语言文件和头文件中定义的,它们是 ld 在链接所有 .o 文件的时候自己添加的。
end 和 _end 的地址,就是最终程序的堆的起始地址
要打印它们的话,一个样例程序在下面:
#include <stdio.h> #include <stdlib.h> extern char etext, edata, end; /* The symbols must have some type, or "gcc -Wall" complains */ extern char _end; int main(int argc, char *argv[]) { printf("end = %c\n", end); printf("_end = %c\n", _end); 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); printf(" uninitialized data (_end) %10p\n", &_end); exit(EXIT_SUCCESS); }
我的机子上得到的日志如下:
end =
_end =
First address past:
program text (etext) 0x5649be9f72d5
initialized data (edata) 0x5649be9fa010
uninitialized data (end) 0x5649be9fa018
uninitialized data (_end) 0x5649be9fa018
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。