代码片段,用于查找程序的堆段或堆栈段的大小

时间:2013-09-01 12:46:52

标签: c malloc

我在接受采访时被问到这个问题,malloc可以分配的最小尺寸是多少,malloc可以分配的最大尺寸是多少。

我回答了1 byte的最小尺寸,当我告诉他回答假设现在是正确的时候告诉我内存块可以malloc分配的最大大小是什么(当你尝试{{1}时它失败了一段时间),认为你有malloc的RAM,你给我写了一个代码,找到你编写的简单程序的堆段大小,或者写一个代码来查找堆栈段的大小。

任何人都可以帮助我解决这个问题。

它可以分配的最小尺寸是4GB吗?我回答说,char需要最少的记忆。

2 个答案:

答案 0 :(得分:0)

是的,保证最小尺寸malloc(size_t)能够分配(size_t) 1

请求0字节是否返回NULL取决于实现。

C标准(WG14 / N1256)7.20.3:

  

如果请求的空间大小为零,则行为是实现定义的:   返回空指针,或者行为就像大小一样   非零值,但返回的指针不得用于访问对象

答案 1 :(得分:0)

真正分配的最小大小malloc是1个字节。根据C标准(7.22.3),"如果请求的空间大小为零,则行为是实现定义的:返回空指针,或者行为就像大小是非零的一样值,但返回的指针不得用于访问对象。"

另一方面,malloc几乎肯定会分配比1更多的字节,即使你用大小1调用它。它需要额外的字节来存储附加信息,例如:分配的内存块的大小,这是释放所需的。此外,存在内存对齐问题。

如果你被要求编写一个程序来计算最大大小malloc可以在给定的4GB内存机器上分配,并且在给定时间,我认为你应该写一个使用二进制搜索的程序找到确切的最大值。当然,每次调用程序时,程序的答案可能会有所不同。使用堆栈分配的可变大小的数组可以完成相同的操作,以计算堆栈的最大允许大小。