感谢您的回复和回答。这个问题被编辑了,因为我之前的所有问题似乎都非常模糊,没有给出我想要实现的目标的确切细节。
更新问题:
在 Linux 平台上使用 C 语言,有哪些可能的方法来确定我的应用程序中使用的堆的大小。例如..
void printHeapReport( )
{
/* implementation here to print the heap size */
}
int main()
{
char *ptemp = NULL;
p = (char*)malloc( 10 ); /* 10 bytes */
printHeapReport();
return 0;
}
应用程序将在标准输出屏幕中输出:
Debug Report:
--------------
Heap: 10 bytes
--------------
我问这个是因为我想在应用程序中创建一个调试报告来打印堆的大小。
请指教。
非常感谢。
老问题:
使用C asm inline函数,是否可以知道堆的起始地址和堆的结束地址?还有程序结束的地址?
asm( <assembly code> );
因此,使用此代码我可以确定我的应用程序中使用的堆的大小。这种方法对确定堆的大小有效吗?
请指教。
非常感谢。
最佳答案
您至少必须指定您正在处理的平台,并意识到在许多平台上这个问题并没有真正的答案。 “堆”不需要是连续的——在许多情况下,不同类型的对象会有多个堆(比如某些大小的请求),运行时可能会根据需要从底层操作系统获取“堆” block .
与“程序”类似 - 可执行文件的各个部分可能散布着数据或地址空间中没有任何内容的区域。
关于c - 如何知道堆尾的地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4755562/