我正在解决一个测试问题,我不确定答案是否正确。问题是:如果我在32位操作系统下运行代码,当我们从函数hook()中的函数malloc()返回时,将在堆栈上分配多少空间。还假设已分配所有必需的内存。
…char A[1000000]…
int hook() {char C[2000000]; …
ptr_char2 = (char) malloc (5000000)); /*Hi guys, how much memory do I have now?*/……
}
int main() {
char B[3000000];……
ptr_char = (char*) malloc (4000000));
hook();…
}
我知道堆栈上存储了静态分配的变量。动态分配在堆上。我试图计算char A(0.9MB)+ char B(1.9)+ char C(2.8),它需要大约5.6MB。但正确的答案是以下1MB,5MB或9MB之一。有人可以在我犯错的地方帮助我吗?提前谢谢。
答案 0 :(得分:0)
A
是静态的,因此不在堆栈中。
在其ultimo深度,调用main
并调用hook
。因此,此时B
和C
都在堆栈中。
总共5000000字节= 4.76837158203125 MB。