2017-06-17 123 views
-1

我正在解决一个测试问题,我不确定是否有正确的答案。问题是:如果我在32位操作系统下运行代码,在函数hook()中从函数malloc()返回的时刻,堆栈中将分配多少空间。还有一个假设,即所有需要的内存都被分配了。堆栈上分配多少空间

Here is code

…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();… 
} 

我知道在堆栈上存储静态分配的变量。动态分配在堆上。我试图计算字符A(0.9MB)+字符B(1.9)+字符C(2.8),大约需要5.6MB。但正确的答案是以下1MB,5MB或9MB之一。有人可以帮我解决我犯的错误吗?先谢谢你。

+0

你应该在问题中包含代码*逐字*,请相应编辑,谢谢! –

+0

你好,欢迎来到Stackoverflow。本网站提供问题和答案,以便他们可以在未来对其他人有用。为此,您需要发布实际的代码,而不是链接到它或它的图像。 – spectras

+0

好吧,我只是把问题的截图,但我试图编辑它。抱歉。 – Kandri6

回答

0

A是静态的,所以不在堆栈中。

在其最高深度处,调用main并调用hook。所以在这一点上,BC都在堆栈中。

这使得总共5000000字节= 4.76837158203125MB。

+0

是的,所以正确的答案是5MB。存储字符A在哪里?谢谢。 – Kandri6

+0

'A'存储在BSS段中,它不是堆栈段,也不是堆段。查阅“BSS”获取更多信息。 –

+0

栈中是否有指针变量? 'ptr_char'和'ptr_char2'没有在函数中定义,但是当然也没有显示它们是静态的......不过,这些选择的最终结果并不重要。 – ilkkachu