我们如何找到堆的最高和最低地址

时间:2010-10-17 20:55:28

标签: c

任何人都可以建议,我们如何使用C找到堆的最高和最低地址?

3 个答案:

答案 0 :(得分:5)

在Linux系统上,您可以使用带有0参数的sbrk()来查找一端。您可以通过了解程序加载器的段排序并检查etext和edata来找到另一端 - 请参阅end(3)联机帮助页。

所有这些都是非标准的,超出了C本身的范围。

答案 1 :(得分:2)

您可以将来电包裹到malloc,以跟踪每次通话时到目前为止看到的最低和最高地址:

extern unsigned char *lowest, *highest;
unsigned char *tmp = malloc(size);
if (!tmp) return 0;
if (!lowest || tmp < lowest) lowest = tmp;
if (tmp+size > highest) highest = tmp;
return tmp;

答案 2 :(得分:1)

答案是你不能在C中。如果你检查语言标准,你会注意到这个概念从未被提及过。

堆是在某些操作环境中使用的实现细节(几乎所有操作都可以)。