我正在运行一个简单的程序,以显示单个进程范围内的堆栈和堆之间的内存容量,并且正在接收一些我可能会误解的奇怪值。
我正在运行以下代码块:
int main() {
uint64_t *heap = new uint64_t;
uint64_t stackvar;
uint64_t diff = &stackvar - heap;
float size = (float) diff/ (1024 * 1024 * 1024); // conversion to GB
free(heap);
return 0;
}
分配的堆变量和堆栈变量的地址值有意义,但是我相信我在误解如何计算两者之间的内存容量,因为diff
的最终值在16TB的范围内通过上面代码中的转换运行它之后。
如何有效地将该范围转换为可以理解的存储范围,或者如果我犯了一个错误,对diff
的正确解释是什么?