任何人都可以建议,我们如何使用C找到堆的最高和最低地址?
答案 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中。如果你检查语言标准,你会注意到这个概念从未被提及过。
堆是在某些操作环境中使用的实现细节(几乎所有操作都可以)。